런레벨 3의 시스템 전체 Vim 붙여넣기 버퍼

런레벨 3의 시스템 전체 Vim 붙여넣기 버퍼

이런 질문을 드리기가 조금 부끄럽지만, 이 주제는 특히 검색하기 어려운 주제인 것 같습니다.

Linux 시스템에서는 터미널 에뮬레이터(가장 일반적으로 macOS에서)를 통해 시스템에 터미널과 SSH를 거의 독점적으로 사용합니다.

일반적으로 터미널 멀티플렉서의 경우 코드 조각과 로그 오류 등을 복사하여 붙여넣는 것은 시스템 전반에 걸쳐 버퍼를 탐색할 때 까다로운 문제입니다. 이는 일반적으로 복사를 위한 터미널 에뮬레이터의 자체 선택 기능을 통해 수행되며 클라이언트 운영을 사용합니다. 시스템의 붙여넣기 버퍼. 이 질문은 그것과 아무 관련이 없습니다.

내 문제는 단일 Linux 서버에서 많은 vim 인스턴스를 열 때입니다. 저는 런레벨 3에 있고 GUI를 실행하고 있지 않습니다. xclip을 사용할 수 없습니다. 주로 X가 설치되어 있지 않기 때문입니다.

이 작업 흐름 도중에 일부 파일을 꺼내서 동일한 삭제 상자에 있는 다른 vim에 붙여넣어야 한다는 것을 깨달았습니다. Vim의 내장 버퍼 +*복사/붙여넣기 버퍼가 작동하지 않습니다. (이 시스템에서는 vim의 클립보드 컴파일 옵션이 활성화되지 않습니다)

그러나 한 vim 인스턴스에서 일부 텍스트를 가져와 종료한 다음 다른 vim 인스턴스를 열고 제대로 붙여넣으면 작동합니다. 따라서 vim을 종료하는 것에 대한 내용은 버퍼를 어딘가에 남겨둡니다. vim을 닫지 않고도 이 시스템의 모든 기능을 실시간으로 작동시킬 수 있다면 정말 좋을 것 같아요. 내 자신의 끌어오기/붙여넣기 구현을 구현하기 위해 계층적으로 끌어오기 및 삭제를 바인딩할 필요가 없도록 하고 싶습니다.

답변1

이것은 .viminfo파일입니다 (:h viminfo).

vim을 종료하면 현재 상태(예: 명령 기록 및 레지스터 값)가 이 파일에 기록됩니다. 시작되면 파일을 읽고 설명된 모든 상태를 복원합니다. 이것은 의미한다마디 없는Vim 세션은 일부 상태를 공유하는 것 같지만 동시 세션은 그렇지 않습니다.

다음 명령을 사용하면 viminfo 파일을 강제로 다시 읽을 수 있습니다.:rv/ :rviminfo주문하다, 수동으로 작성:wv. 따라서 y :wv한 편집기에서는 :rv p다른 편집기에서는 작동하지만 부작용이 있습니다.모두귀하의 레지스터 값과 명령 기록이 재설정될 수 있으며, 이는 귀하에게 중요할 수도 있고 중요하지 않을 수도 있습니다.

이는 또한 장점이 될 수 있습니다. 전체 레지스터를 사용하여 편집기 간에 여러 복사 버퍼를 얻을 수 있는데, 이는 시스템 클립보드가 제공하지 않는 기능입니다. 반면에 y이 작업을 자동으로 수행하도록 리바인드하지 않는 한 이는 그리 편리하지 않으며 p아마도 매번 파일을 읽고 싶지 않을 것입니다. 나는 Leader 명령에 바인딩된 viminfo를 읽고 썼지만 키 입력을 한 번만 절약할 수 있습니다(더 자주 사용하게 될 것 같습니다).


수동으로 호출하는 등 사용할 수 있는 다른 방법이 있습니다.특정 파일에부작용을 피하려면 스스로하십시오. 이것을 원하지 않는 것 같지만 선택 사항입니다. 세션 시스템뿐만 아니라 원하는 작업을 어느 정도 수행하는 플러그인도 있습니다. 귀하의 질문에 대한 직접적인 답변은 아니지만 결국 귀하가 원하는 것이 무엇인지 알려줄 수 있습니다.

답변2

약속대로:

Linux 특정 스크립트(my $HOME/utilin my $PATH):

~/util ❯❯❯ cat linux_pb/pbcopy                                         ✘ 130 master b28083b $ ◼
#!/bin/bash

# pbcopy impl for linux!
# pipe the stdin to a file using cat. Not using bash builtins due to concerns
# about NULs.

FILE="$HOME/.clipboard"
touch $FILE
chmod 600 $FILE
cat > $FILE
~/util ❯❯❯ cat linux_pb/pbpaste                                              master b28083b $ ◼
#!/bin/bash

# pbpaste impl for linux!
# just use the content of the file.

cat ~/.clipboard

vim 바인딩:

vnoremap <silent> <Leader>y :w !pbcopy<CR><CR>
" the leader y works like normal yy (but for my clipboard)
nnoremap <silent> <Leader>y :.w !pbcopy<CR><CR>
nnoremap <Leader>p :read !pbpaste<CR>

멱등성 쉘 별칭 스크립트(bash 및 zsh에서 이 별칭 스크립트를 얻었습니다):

if [ "$(uname)" = Linux ] && ! [[ "$PATH" = *"/linux_pb"* ]]; then
    PATH="$PATH:$HOME/util/linux_pb"
fi

X에서 실제 Linux를 사용하기 시작하면 붙여넣기 버퍼도 활용할 수 있도록 Linux 구성을 더욱 구체화할 것입니다. 다음과 같은 pbcopy프로그램을 만들려면 몇 가지 메커니즘이 필요합니다 .pbpaste이것.

이 방법은 프로그램 수준에서 통합된 방법 중 하나이므로 Vim은 지금 셸에서 할 수 있는 것처럼 이 기능을 활용할 수 있습니다.

관련 정보