선택 사항을 텍스트로 붙여 넣는 vim을 중지하십시오!


10

나는 VI와 VIM을 수년간 (30 년 이상) (xterms, 자체 창, gvim이 아닌) 사용하고 있으며 마우스 중간 버튼을 선택으로 사용하여 vim에 제공하는 vim 명령 라이브러리를 가지고 있습니다 .

예를 들어 나는 종종 다음과 같은 일을 할 것입니다 ...

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

선택에는 테스트 교체, 서식 지정, 줄 이동 등의 작업을 수행하는 많은 VIM 명령이 포함되며 일반적으로 선택이 끝날 때 : w 및 : next VIM 명령으로 끝납니다. vim은 다음 파일에 다시 붙여 넣을 준비가되었습니다. 이를 통해 특별한 스크립트 (per-in-place 편집)를 수행하지 않고도 매우 복잡한 방법으로 많은 수의 파일을 업데이트 할 수 있습니다.

이 vim 명령 페이스트 중 일부는 200 줄 이상입니다 (화면에 팝업되는 텍스트 파일과 '모두 복사'로 저장 됨). 이것은 내가 다시 포맷하는 수천 개의 파일 세트를 많이 변경합니다. 일상적인 vim 작업이 아닌 특정 파일 세트에만 해당 EG : 텍스트 / 데이터 파일의 대량 재 포맷.

문제는 ...

마지막 시스템 패치 (Fedora 25) 동안 vim은 이제 마우스 선택을 vim 명령이 아닌 TEXT로 붙여 넣으며 중지 할 수 없습니다!

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

텍스트로 붙여 넣으려면 붙여 넣기 전에 삽입 모드로 들어갑니다! VIM이 삽입 모드에 있지 않을 때 선택 사항을 텍스트로 자동 붙여 넣기를 원하지 않습니다. 나는 이것이 보안 기능이라는 것을 알고 있지만, 그것은 중요한 유용성 문제입니다.

나는 이것을하지 않는 기계 (특히 "kmous"terminfo 항목)에서 데이트 terminfo 항목 (xterm-256color)을 다시 시도했습니다. 또한 vim ": set mouse ="설정 (null입니다!)도 살펴 보았습니다. 그것이 xterm (의심) 또는 VIM에서 변경된 것 (아마도)인지 모르겠으며 변경 로그와 Google은 도움이되지 않았습니다.

그러나 아무것도 나에게 오래된 행동을하지 않는 것 같습니다.


또 같은 문제를 가진 사용자, 덜 상세하게, 아니 솔루션을 찾을 수 unix.stackexchange.com/questions/346293/...
안토니

1
vim변경 가능성이 더 높습니다. 키보드를 통해 무언가를 입력하거나 마우스 버튼을 통해 붙여 넣을 수 vim있는 방법은 xterm무엇입니까? 나는 그런 메커니즘을 모른다. 반면, xterm실행 중임을 알고 vim있으므로 붙여 넣기를 i<esc> 로 둘러 쌀 수 있습니다. (a) 다른 종류의 터미널 창과 (b) vim다른 이름 의 사본을 사용해보십시오 . 문제의 원인을 좁히는 데 도움이됩니다.
Philippos

@philippos에 동의합니다. 아마도 vim붙여 넣기 방법을 가로채는 것 이외의 것이 있을 수 있습니다. 어쩌면 컴퓨터에 ssh'ing 또는 telneting하여 붙여 넣을 수도 있습니다. Windows 상자가있는 경우 퍼티를 사용하여 Fedora25 머신에 ssh하여 붙여 넣습니다.
Jim U

직접 관련이 없지만 Windows의 gvim은 수년간 이런 식으로 작동했습니다. gvim을 설치하면 gvim.exe(graphical-vim) 및 command-line의 두 가지 실행 파일 이 제공됩니다 vim.exe. gvim.exe에 "itext"를 붙여 넣으면 얻을 수 itext있습니다. 그것을 vim.exe에 붙여 넣으면text
Jim U

1
@Philippos이 메커니즘은 붙여 넣기가 가능 합니다. Vim이 어떻게 그것을 지원할 수 있는지, 아마도 pastetoggle옵션을 모르겠습니다 .
Gilles 'SO- 악마 중지'

답변:


12

많은 웹 페이지를 살펴본 후 작동하지 않는 힌트를주는 많은 사람들이 나에게 원인과 문제의 해결책으로 이어지는 힌트 (붙여 넣기 주위의 추가 텍스트)를 발견했습니다.

vim은 특정 터미널을 인식 할 때 사용하는 많은 '가짜'termcap 항목을 내장 한 것으로 보입니다 (이 경우에는 잘못되지 않았지만 때때로 잘못됨).

vim의 Termcap 설정은 일반 ": set all"설정 목록에 표시되지 않으므로 추가됩니다. 그것들을 보려면 ": set termcap"을 사용해야합니다. 특정 '비표준'termcap 설정은 "t_BE"입니다 (vim ": help t_BE"참조). 내장 된 도움말 "xterm-bracketed-paste"는이 내부 -vim termcap 설정을 설명합니다.

기본적으로이 설정이 정의 된 경우 (이 경우 vim이 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을 해당 모드로 설정해야합니다.

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


이것은 Cygwin Vm에서도 작동하는 것으로 보이지만 슬프게도 VS Vim의 문제를 해결하지 못합니다
James Robinson

@JamesRobinson VS의 다른 내장 터미널 일 것입니다.
Anthony
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.