텍스트를 vim에 붙여 넣을 때 자동 들여 쓰기 사용 안함




vim unset auto indent (16)

이것을 ~/.vimrc 추가하면 붙여 넣기 전후에 F2 키 를 누르면됩니다 :

set pastetoggle=<F2>

저는 Vim을 배우려고 노력하고 있습니다.

클립 보드에서 문서에 코드를 붙여 넣으면 각 줄 시작시에 여분의 공백이 생깁니다.

line
  line
    line

자동 들여 쓰기를 해제 할 수는 있지만 다른 설정이 충돌하거나 무언가 (내 .vimrc에서 꽤 분명해 보이지만 제거 할 때 중요하지 않은 것 같아서) 때문에 작동하지 않습니다.

코드를 붙여 넣을 때 자동 들여 쓰기를 끄지 만 코드를 작성할 때 vim 자동 들여 쓰기를 유지하려면 어떻게합니까? .vimrc 파일은 다음과 같습니다.

set expandtab  
set tabstop=2  
set shiftwidth=2  
set autoindent  
set smartindent  
set bg=dark  
set nowrap  

나는 보통 다음을 사용한다 :r! cat :r! cat 을 누른 다음 내용을 붙여 넣거나 ( shift + insert ) CTRL+D ( shift + insert ) .

사용 및 사용 중지, 직접 사용 필요 없음


붙여 넣기 중에 원하지 않는 결과가 발생하지 않도록하려면 다음과 같이 옵션을 설정해야합니다.

set paste

.vimrc에있는 유용한 명령은 set pastetoggle=<F10> 또는 다른 버튼으로 설정되어 붙여 넣기와 붙여 넣기 사이를 쉽게 전환 할 수 있습니다.


붙여 넣기하는 또 다른 방법은 <CR> 을 사용하여 레지스터 내용 (여기서는 전역 레지스터)을 삭제하는 것입니다. 참조 : :h i_ctrl-rh i_CTRL-R_CTRL-O .

vim 도움말 문서에서 :
Insert the contents of a register literally and don't auto-indent. Does the same as pasting with the mouse<MiddleMouse>. Does not replace characters! The '.' register (last inserted text) is still inserted as typed.{not in Vi}

따라서 자동 들여 쓰기가없는 내용을 vim에 붙여 넣으려면 대부분의 유닉스 시스템에서 <CR><CO>* 를 사용하십시오.

참고 : 이것은 vim이 clipboard 로 컴파일 된 경우에만 작동합니다.


터미널 내부에서 작업 할 때 vim-bracketed-paste vim 플러그인은 vim-bracketed-paste 전후에 키 입력을하지 않고도 붙여 넣기를 자동으로 처리합니다.

그것은 libvte를 사용하는 iTerm2, gnome-terminal 및 다른 터미널과 같은 "최신"x-term 호환 터미널에 의해 보내진 이스케이프 시퀀스 인 브라켓 붙여 넣기 모드 를 탐지하여 작동합니다. 추가 보너스로 tmux 세션에서도 작동합니다. Linux 서버에 연결하고 tmux를 사용하는 Mac에서 iTerm2를 사용하여 성공적으로 사용하고 있습니다.


업데이트 : 더 나은 답변 : https://.com/a/38258720/62202

코드를 붙여 넣을 때 자동 들여 쓰기를 끄려면 특별한 "붙여 넣기"모드가 있습니다.

유형

:set paste

그런 다음 코드를 붙여 넣습니다. 도구 설명의 텍스트에 이제 -- INSERT (paste) -- 됩니다.

코드를 붙여 넣은 후 붙여 넣기 모드를 해제하여 입력 할 때 자동 들여 쓰기가 올바르게 작동하도록합니다.

:set nopaste

그러나, 나는 항상 그 성가신 것으로 나타났습니다. 그래서 텍스트를 편집하는 동안 붙여 넣기 모드와 붙여 넣기 모드 사이를 전환 할 수 있도록 <F3> 매핑 합니다! 나는 이것을 .vimrc 추가한다.

set pastetoggle=<F3>

vim에서 : ]p

밖에서 : "*]p 또는 "+]p


:pastetoggle :paste:nopaste 가 잘 작동해야합니다 (구현 된 경우 - 항상 토론과 같이 볼 수있는 것은 아닙니다). "+p 또는 "*p 직접 접근 방식을 사용하여 붙여 넣기를하고 "+r 또는 "*r :

Vim은 10 가지 유형의 레지스터 ( :help registers )에 quotestar 있으며 quoteplus 는 섹션의 quotestarquoteplus 관심이 있습니다.

  1. 선택 및 드롭 레지스터 "* , "+ 및 "~

이러한 레지스터를 사용하여 GUI에 대해 선택한 텍스트를 저장하고 검색합니다. quotestarquoteplus 참조하십시오. 클립 보드를 사용할 수 없거나 작동하지 않는 경우 이름이없는 레지스터가 대신 사용됩니다. Unix 시스템의 경우 클립 보드는 + xterm_clipboard 기능이있는 경우에만 사용할 수 있습니다. {Vi에 없음}

X11 시스템의 경우 "*와"+는 구별됩니다.

:help x11-selection*+ 의 차이점을 명확히합니다.

                                                  quoteplus quote+

PRIMARY (Vim의 Visual 모드에서와 같이 현재 시각적 선택을 나타낼 것으로 예상 됨), SECONDARY (잘못 정의 됨) 및 CLIPBOARD (잘라 내기, 복사 및 붙여 넣기 작업에 사용될 것으로 예상되는)의 세 가지 문서가 있습니다. ).

이 세 가지 중 Vim은 "* 레지스터를 읽고 쓰는 경우 PRIMARY를 사용합니다 (따라서 X11 선택이 가능할 때 Vim은"자동 선택 "의 '클립 보드'에 대한 기본값을 설정합니다). 그리고 + 레지스터를 읽고 쓸 때 CLIPBOARD를 사용합니다. Vim은 SECONDARY 선택에 접근하지 않습니다.

예 : (기본 옵션 값으로 가정)

  • Vim에서 Visual 모드로 URL을 선택하십시오. 브라우저로 이동하여 URL 텍스트 필드에서 마우스 가운데 버튼을 클릭하십시오. 선택한 텍스트가 삽입됩니다 (잘하면!). 참고 : Firefox에서는 about : config에서 middlemouse.contentLoadURL 환경 설정을 true로 설정할 수 있습니다. 그러면 창의 대부분의 위치에서 가운데 ​​마우스 버튼을 누르면 선택된 URL이 사용됩니다.

  • 마우스로 드래그하여 브라우저에서 일부 텍스트를 선택하십시오. Vim으로 가서 가운데 ​​마우스 버튼을 누르십시오 : 선택한 텍스트가 삽입됩니다.

  • Vim에서 텍스트를 선택하고 "+ y"를 눌러 브라우저로 가서 마우스로 드래그하여 텍스트 필드의 텍스트를 선택한 다음 마우스 오른쪽 버튼을 사용하여 팝업 메뉴에서 "붙여 넣기"를 선택하십시오. Vim의 텍스트 "+ 레지스터의 텍스트는 비주얼 선택을 할 때 사용할 수 있으므로"* 레지스터에서 다른 텍스트를 사용할 수 있습니다. 그러면 선택한 텍스트를 덮어 쓸 수 있습니다.

Mac 사용자는 다음을 사용하여 대지에서 직접 읽음으로써 자동 서식을 피할 수 있습니다.

:r !pbpaste

필자가 알고있는 가장 빠른 방법은 한 번에 붙여 넣기를 위해 붙여 넣기 모드로 빠르게 이동하는 것입니다. tpope는 unimpaired . 이는 yo 와 yO를 특징으로하며 아마도 "열어두기"에 대한 니모닉을 사용합니다. 그들은 그의 vimdoc에서만 문서화되어 있습니다 :

단독 삽입의 일반적인 사용 사례가 너무 낭비하기 때문에 '붙여 넣기'에 대한 토글이 제공되지 않았습니다. 두 번 토글하지만 한 번 붙여 넣기 만합니다 (YOPO). 대신 yo 또는 yO를 눌러 '붙여 넣기'가 이미 설정된 상태에서 o 또는 O를 호출하십시오. 삽입 모드를 종료하면 'nopaste'가 자동으로 설정됩니다.


당신이 Mac에 있다면, macvim은 붙여 넣기를 토글하지 않고도 잘 처리하는 것 같습니다.

brew install macvim --override-system-vim


다음은 붙여 넣기 이벤트를 다시 매핑하여 붙여 넣기 모드를 자동으로 켜고 끄는 방법을 알아 낸 사람이 올린 게시물 입니다. MacOSX의 tmux / iTerm에서 저에게 적합합니다.


나는 set clipboard=unnamed 를 내 .vimrc에 set clipboard=unnamed 라고 set clipboard=unnamed . 그러면 기본 붙여 넣기 버퍼가 X의 클립 보드에 매핑됩니다.

따라서 터미널에 약간의 텍스트를 표시하면 p 를 눌러 vim에 붙여 넣을 수 있습니다. 마찬가지로 vim에서 물건을 뽑을 수 있습니다 (예 : YY 로 버퍼에 현재 줄을 뺀다).

던노. 나는 그것이 매우 편리하다는 것을 안다.


paste/nopaste/pastetoggle 사용하여 붙여 넣기 모드를 설정하는 것은 완벽하지만, 붙여 넣기 전에 수동으로 붙여 넣기 모드를 설정해야합니다. 붙여 넣기 후에 붙여 넣기 모드를 비활성화해야합니다. 내가 아는 게으른 사람이라면 붙여 넣기 할 때 자동으로 붙여 넣기 모드를 토글하는 지금까지 찾은 최고의 솔루션입니다.

여기에 터미널의 괄호 붙여 붙여 넣기 모드를 사용하여 붙여 넣을 때 Vim의 붙여 넣기 모드를 자동으로 설정 / 해제하는 작은 트릭이 있습니다. .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

이제 붙여 넣기 모드를 명시 적으로 켜기 / 끄기없이 붙여 넣을 수 있습니다. 자동으로 처리됩니다.

출처 : Coderwall


로컬에서 작업하는 경우 키 시퀀스를 사용하여 시스템 클립 보드에서 붙여 넣을 수 있습니다.

"+p

이것은 적절한 vim 명령이므로 삽입 모드를 입력하거나 자동 들여 쓰기를 처음부터 꺼려 할 필요가 없습니다.

물론 원격으로 작업하는 경우 (예 : SSH를 통해 콘솔에서 작업하는 경우) 작동하지 않으므로 :set noai , 모드 삽입, 콘솔에 붙여 넣기, 삽입 모드에서 나가기 :set ai 다른 곳에서 설명한대로 경로 :set ai .


슬프게도 vim 플러그인이 iTerm2 3.0.15 (이전 버전에서 파손되었는지는 알 수 없지만)와 함께 작동하지 않는다고 언급했으나 대신이 해킹을 발견했습니다.

붙여 넣기를하고 iTerm2 vim 키를 사용하려면 command-p를 매핑하십시오. 분명히 iTerm2에서만 작동합니다.

어떻게 작동하는지. 나는 "jk"를 사용하여 이스케이프 모드로 들어가므로 다음과 같이해야한다.

: inoremap jk

.vimrc에.

그런 다음 P를 호출하여 붙여 넣기 모드를 시작합니다. "+ p를 눌러 클립 보드에서 붙여 넣은 다음 P를 눌러 붙여 넣기 모드를 비활성화하십시오 .hth.





auto-indent