Mac OS X에서 터미널 창에 코드를 vim에 붙여 넣기
내 Mac OS X 터미널 창에 코드를 붙여 넣으면 vim에 각 행이 들여 쓰기됩니다. 각 줄에 들여 쓰기를 추가하여 텍스트가 다음과 같이 보이도록합니다.
"ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud
ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in
reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.
Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia
deserunt mollit anim id est laborum."
내 현재 해결 방법은 먼저 텍스트를 올바른 서식을 유지하는 textmate 텍스트 편집기에 붙여 넣는 것입니다. 그런 다음 해당 파일을 저장하고 vim에서 엽니 다. 그런 다음 vim yank를 사용하여 붙여 넣습니다.
내 .vimrc에이 동작을 변경할 수있는 설정이 있습니까? 아니면 이것이 최종 문제입니까?
vim 내에서 :
:set paste
Vim을 붙여 넣기 모드로 설정합니다. 이것은 하나의 창에서 일부 텍스트를 잘라내거나 복사하여 Vim에 붙여 넣을 때 유용합니다. 이렇게하면 예기치 않은 효과를 피할 수 있습니다.
업데이트 : Vim 8에는 브래킷 붙여 넣기 모드에 대한 기본 지원이 포함되어 있습니다. 기본적으로 활성화되어 있습니다. Vim의 xterm-bracketed-paste
도움말 항목을 참조하십시오 . 사용자는 더 이상이를 지원하기 위해 Vim을 구성하기 위해 아무것도 할 필요가 없습니다.
Mac OS X Lion 10.7부터 터미널은 사용자가 텍스트를 붙여 넣을 때 터미널 에뮬레이터가 tty에 연결된 프로그램에 알릴 수있는 "브래킷 붙여 넣기 모드"를 지원하므로 프로그램이이를 편집 명령으로 해석하지 않습니다. 이를 지원하는 프로그램은이 모드를 활성화하기 위해 터미널에 이스케이프 시퀀스를 전송합니다.이 모드에서는 터미널이 붙여 넣은 텍스트를 시작과 끝을 식별하는 이스케이프 시퀀스 쌍으로 둘러 쌉니다.
Vim에서이를 활성화하려면 ~ / .vimrc 파일에 다음 코드를 넣으십시오.
if &term =~ "xterm.*"
let &t_ti = &t_ti . "\e[?2004h"
let &t_te = "\e[?2004l" . &t_te
function! XTermPasteBegin(ret)
set pastetoggle=<Esc>[201~
set paste
return a:ret
endfunction
map <expr> <Esc>[200~ XTermPasteBegin("i")
imap <expr> <Esc>[200~ XTermPasteBegin("")
vmap <expr> <Esc>[200~ XTermPasteBegin("c")
cmap <Esc>[200~ <nop>
cmap <Esc>[201~ <nop>
endif
이렇게하면 Vim이 터미널을 대체 화면 † (t_ti, t_te)으로 /에서 전환 할 때 브래킷 붙여 넣기 모드 (ESC [? 2004 h, ESC [? 2004 l))를 활성화 / 비활성화합니다. 붙여 넣기 시작을 나타내는 이스케이프 시퀀스 (ESC [200 ~)를 받으면 붙여 넣기 모드 (붙여 넣기 설정)를 활성화하고 필요한 경우 삽입 모드 ( "i")로 전환합니다. 일치하는 붙여 넣기 끝 마커 (ESC [201 ~)를 수신하면 붙여 넣기 모드 (pastetoggle)가 비활성화되고 삽입 모드로 유지됩니다. 이 cmap
명령은 Vim 명령 줄이 이스케이프 시퀀스를 무시하고 붙여 넣은 텍스트를 그대로 받아들이도록 정렬합니다.
$ TERM 값이 "xterm…"으로 시작하는 경우에만 대괄호 붙여 넣기 모드가 활성화됩니다. $ TERM을 다른 것으로 설정하는 경우 $ TERM 값을 포함하도록 해당 테스트를 수정할 수 있습니다. 또는 엄격하게 필요한 것은 아니기 때문에 테스트를 완전히 생략 할 수 있습니다. 다른 터미널 유형과 호환되지 않을 수있는 작업을 수행하지 않도록주의하는 것입니다.
터미널에서 이것은 모든 다양한 붙여 넣기 명령 및 끌어서 놓기와 함께 작동합니다.
† 터미널에는 기본 화면과 "대체"화면이 있습니다. 각 화면에는 고유 한 내용과 상태가 있습니다. 대체 화면의 텍스트는 스크롤 백 로그로 스크롤되지 않습니다. 일반적으로 전체 화면을 제어하는 프로그램에서 사용되므로 "전체 화면"프로그램이라고합니다. 예를 들어 여기에는 vim, emacs, less 및 top이 포함됩니다.
다른 답변 외에도 붙여 넣기 모드를 빠르게 전환하려면 다음을 추가하십시오.
set pastetoggle=<F2>
.vimrc에. 이제 F2 (또는 선택한 키)를 눌러 붙여 넣기 모드를 전환 할 수 있습니다.
Vim에서
: 세트 붙여 넣기
비활성화하고 싶을 때
: nopaste 설정
이를 수행하는 또 다른 방법은 시스템 클립 보드가 올바르게 설정되어 있다고 가정하고
"+p
시스템 클립 보드에서 붙여 넣습니다.
터미널 내부에서 작업 할 때 vim-bracketed-paste vim 플러그인은 붙여 넣기 전후에 키 입력없이 자동으로 붙여 넣기를 처리합니다.
이것은 터미널, iTerm2 및 브라켓 붙여 넣기 모드를 지원하는 "최신"x-term 호환 터미널에서 작동합니다. 추가 보너스로 tmux 세션에서도 작동합니다. Linux 서버에 연결하고 tmux를 사용하는 Mac의 iTerm2와 함께 성공적으로 사용하고 있습니다.
플러그인은 기본적으로 @Chris Page가 그의 답변에 나열한 기능의 패키지 버전입니다 .
참고 URL : https://stackoverflow.com/questions/5585129/pasting-code-into-terminal-window-into-vim-on-mac-os-x
'Program Tip' 카테고리의 다른 글
특정 필드 값을 기준으로 먼저 정렬 (0) | 2020.11.09 |
---|---|
SQL Server® 2016 Express 전체 다운로드 (0) | 2020.11.09 |
문자열의 문자 순서를 반대로 (0) | 2020.11.09 |
Symfony2 컨트롤러에서 사용자 IP 주소를 어떻게 얻습니까? (0) | 2020.11.09 |
ServerName이없는 기본 가상 호스트에서 HTTP를 HTTPS로 리디렉션 (0) | 2020.11.09 |