vim이 선택 항목을 텍스트로 붙여넣는 것을 중지하세요!

vim이 선택 항목을 텍스트로 붙여넣는 것을 중지하세요!

저는 수년간(30년 이상)(자체 창인 gvim이 아닌 xterms에서) VI와 VIM을 사용해 왔으며 거대한 vim 라이브러리를 보유하고 있습니다.주문하다나는 vim 선택을 위해 마우스 가운데 버튼을 사용합니다.

예를 들면 저는 이런 일을 자주 합니다...

 vi {many_hundreds_of_files}
   paste vim commands using mouse - one paste per file.

선택에는 테스트 교체, 형식 지정, 줄 이동 등과 같은 작업을 수행하는 여러 VIM 명령이 포함되며 일반적으로 선택이 끝나면 :w 및 :next VIM 명령으로 끝나므로 vim은 내가 할 준비가 되어 있습니다. 파일의 다음 항목에 다시 붙여넣습니다. 이를 통해 특별한 스크립트(예: Perl 내부 편집)를 사용하지 않고도 매우 복잡한 방식으로 많은 수의 파일을 업데이트할 수 있습니다.

이러한 vim 명령 중 일부는 최대 200줄 이상을 붙여넣습니다(화면에 표시하고 "모두 복사"하는 텍스트 파일에 저장됨). 이러한 명령은 다시 포맷하는 수천 개의 파일 세트에 많은 변경 사항을 적용합니다. 하지만 특정 파일 세트에만 해당되며 일상적인 vim 작업에는 적합하지 않습니다. EG: 텍스트/데이터 파일의 일괄 재형식 지정.

질문...

마지막 시스템 패치(Fedora 25) 동안 vim은 이제 vim 명령 대신 마우스 선택 항목을 텍스트로 붙여넣는데, 이를 멈출 수 없을 것 같습니다!

다른 시스템(Fedora 24)에서는 여전히 잘 작동합니다.

텍스트로 붙여넣고 싶으면 삽입 모드로 들어가서 붙여넣으세요! 삽입 모드가 아닐 때 VIM이 선택 항목을 텍스트로 자동 붙여넣는 것을 원하지 않습니다. 나는 이것이 보안 기능이라는 것을 알고 있지만 나에게는 이것이 주요 유용성 문제입니다.

나는 이 작업을 수행하지 않는 컴퓨터(특히 "kmous" terminfo 항목)에서 terminfo 항목(xterm-256color)을 소급 적용해 보았습니다. vim ":set mouse=" 설정도 확인했습니다(비어있습니다!). 이것이 xterm(의심스러운)인지, 아니면 VIM에서 발생한 변경인지(아마도), 변경 로그와 Google이 도움이 되지 않았는지 모르겠습니다.

하지만 아무것도 이전의 행동으로 돌아가게 하는 것 같지 않습니다.

답변1

많은 웹 페이지를 검색한 후 작동하지 않는 것 같은 몇 가지 힌트를 제공한 후 문제의 원인과 해결 방법을 알려주는 힌트(주변에 추가 텍스트 붙여넣기)를 찾았습니다.

vim에는 특정 터미널을 인식할 때 사용하는 "가짜" termcap 항목이 많이 내장되어 있는 것 같습니다(이 경우는 아니지만 오류가 있는 경우도 있음).

vim의 Termcap 설정에는 추가 사항이 많기 때문에 일반적인 ":set all" 설정 목록에는 표시되지 않습니다. 그것들을 보려면 ":set termcap"을 사용해야 합니다. 구체적인 "비표준" termcap 설정은 "t_BE"입니다(vim ":help t_BE" 참조). 내장된 도움말 "xterm-bracketed-paste"에서는 vim 내부 termcap 설정에 대해 설명합니다.

기본적으로 이 설정이 정의된 경우(이 경우에는 termcap/terminfo가 아니라 Vim에 의해) vim은 시작 시 이를 xterm으로 보내 xterm에 텍스트 주위에 특수 코드를 추가하라고 지시합니다. vim이 이를 보면 자동으로 삽입 모드로 들어갈 뿐만 아니라 텍스트 서식을 지정하지 않도록 "붙여넣기 모드"도 설정합니다.

저는 후자(붙여넣기 모드)가 매우 유용하다고 생각합니다! 전자는 항상 나에게 문제를 안겨주었다.

무차별적인 해결책은 이것을 ".vimrc"에 추가하여 대괄호 붙여넣기를 비활성화하는 것입니다.

:set t_BE=

대체 솔루션....

대괄호 붙여넣기를 완전히 비활성화하는 대신 명령 또는 일반 모드에서 (마우스에서) 터미널 붙여넣기 시작 순서를 볼 때 vim이 작업을 수행하지 못하도록 중지하세요.

:nmap <PasteStart>  <NOP>
:nmap <PasteEnd>    <NOP>
:cmap <PasteStart>  <NOP>
:cmap <PasteEnd>    <NOP>

이를 사용하면 삽입 모드에서 텍스트를 붙여넣을 경우 vim은 이미 들여쓰기되었을 가능성이 높은 텍스트의 서식을 지정(들여쓰기)하지 않습니다.

이는 붙여넣기 모드 토글(F2에 매핑됨)을 사용하여 "showbreak" 및 "listchars"(줄 바꿈, 탭, 줄바꿈 없는 공백 및 추가 줄 끝 표시)를 비활성화하기 때문에 더 이상 붙여넣기 모드를 토글할 필요가 없다는 의미는 아닙니다. ) 공간). 마우스 선택을 사용하여 다른 곳에 붙여넣으려면 여전히 vim을 해당 모드로 설정해야 합니다.

솔루션에 대한 의견과 제안을 환영합니다.

관련 정보