Vim에 다음 스크립트를 붙여넣으면:
#!/bin/sh
VAR=1
while ((VAR < 10))
do
echo "VAR1 is now $VAR"
((VAR = VAR +2))
done
echo "finish"
다음과 같은 이상한 결과가 나타납니다.
#!/bin/sh
#VAR=1
#while ((VAR < 10))
# do
# echo "VAR1 is now $VAR"
# ((VAR = VAR +2))
# done
# echo "finish"
#
파운드 기호(#)와 탭 문자가 있습니다. 왜?
답변1
두 가지 이유가 있습니다:
vim
자동 들여쓰기를 활성화한 상태로 붙여넣으려면 다음으로 변경해야 합니다.붙여넣기 모드다음을 입력하여:
:set paste
그런 다음 삽입 모드로 변경하고 코드를 붙여 넣을 수 있습니다. 붙여넣기가 완료되면 다음을 입력합니다.
:set nopaste
붙여넣기 모드를 끕니다. 이는 일반적이고 빈번한 작업이므로 vim
토글 붙여넣기 모드가 제공됩니다.
set pastetoggle=<F2>
F2
원하는 키로 변경할 수 있으며 이제 붙여넣기를 쉽게 켜고 끌 수 있습니다.
댓글 자동 삽입을 끄려면 다음 줄을 추가하세요.vimrc:
augroup auto_comment
au!
au FileType * setlocal formatoptions-=c formatoptions-=r formatoptions-=o
augroup END
vim
또한붙여넣기 레지스터시스템 클립보드의 텍스트를 붙여넣을 수 있습니다. 시스템에 따라 "*p
또는 를 사용할 수 있습니다 . "+p
OSX 또는 Windows와 같이 X11이 없는 시스템에서는 레지스터를 사용해야 합니다 *
. X11 시스템(예: Linux)에서는 두 가지를 동시에 사용할 수 있습니다.
추가 읽기
답변2
vim을 사용하여 붙여넣으세요. 원하는 것은 클립보드 버퍼의 내용을 붙여넣는 것입니다. "+p
그러면 해당 항목이 선택되어 +
붙여넣어집니다.
Linux를 사용하는 경우 *
X/가운데 클릭 버퍼(마지막으로 선택한 텍스트)입니다.
그러면 vim은 이것이 페이스트라는 것을 알게 됩니다.
그렇지 않으면 vim은 붙여넣을 키를 입력했다고 생각하고 붙여넣기 끝까지 자체 자동 들여쓰기(복사된 들여쓰기 위에)를 수행합니다.
SSH를 통해 이 작업을 수행하려면 클립보드를 공유하는 옵션을 설정해야 합니다.-Y
man ssh
자세한 내용은 참조하십시오 .
답변3
자동 들여쓰기가 켜져 있기 때문에 탭이 삽입되며, :set noai
터미널에 붙여넣기 전에 자동 들여쓰기( )를 꺼서 해당 동작을 비활성화할 수 있습니다.
주석 줄은 자동 주석에 의해 생성되며 이를 꺼서 비활성화할 수 있습니다.
이 외에도 토글을 사용하여 원하는 동작을 얻고 :set paste
, 형식화된 코드를 붙여넣고, :set nopaste
정상적인 동작을 복원해야 합니다.
답변4
그 이유에 대해서는 다른 블로거들이 명확하게 설명했습니다. 여기서는 이러한 상황을 자동으로 처리할 수 있는 솔루션을 제공하고 싶습니다.
다음 콘텐츠에서~\.vimrc
let &t_SI .= "\<Esc>[?2004h"
let &t_EI .= "\<Esc>[?2004l"
inoremap <special> <expr> <Esc>[200~ XTermPasteBegin()
function! XTermPasteBegin()
set pastetoggle=<Esc>[201~
set paste
return ""
endfunction
자동 들여쓰기 걱정 없이 자유롭게 붙여넣을 수 있습니다.
tmux에서 작업하는 경우 다음을 작성해야 합니다.
function! WrapForTmux(s)
if !exists('$TMUX')
return a:s
endif
let tmux_start = "\<Esc>Ptmux;"
let tmux_end = "\<Esc>\\"
return tmux_start . substitute(a:s, "\<Esc>", "\<Esc>\<Esc>", 'g') . tmux_end
endfunction
let &t_SI .= WrapForTmux("\<Esc>[?2004h")
let &t_EI .= WrapForTmux("\<Esc>[?2004l")
function! XTermPasteBegin()
set pastetoggle=<Esc>[201~
set paste
return ""
endfunction
inoremap <special> <expr> <Esc>[200~ XTermPasteBegin()
출처는코더 월더 많은 것을 읽고 싶다면.
동등한 개행 함수를 사용하는 경우 screen
다음과 같습니다.
function! WrapForScreen(s)
if exists('$TMUX') || match($TERM, "screen")==-1
return a:s
endif
let screen_start = "\<Esc>P"
let screen_end = "\<Esc>\\"
return screen_start . a:s . screen_end
endfunction
발견 중스테이펠버그의 .vimrc
.