항상 : set paste를 사용하십시오. 좋은 생각입니까?


19

터미널 vim에서 클립 보드 데이터를 붙여 넣으면 종종 코드 들여 쓰기가 엉망이됩니다. :set paste들여 쓰기를 사용 하면 깨지지 않았습니다. 데이터를 붙여 넣은 후에 :set nopaste다시 해야 합니까? 그렇지 않으면 어떻게됩니까?


스스로 노력하는 것은 어떻습니까? 아니면 문서를 읽고 ?
romainl

1
"터미널 창에 코드를 vim으로 붙여 넣기"에 대한 답변의 "브래킷 붙여 넣기 모드"도 참조하십시오 . stackoverflow.com/a/7053522/754997 . 터미널 에뮬레이터가 지원하는 경우 터미널에 텍스트를 붙여 넣을 때마다 Vim이 자동으로 붙여 넣기 모드로 전환하거나 붙여 넣기 모드를 전환하도록 지시 할 수 있습니다.
Chris 페이지

1
@romainl 나는 1) 항상 set paste (+-nopaste)를 사용하여 부정적인 결과가 있는지 확인하기 위해 노력하고 기다리고 있고 2) rtfm-ing (OP와 같은 하위 또는 중간 수준의 사용자로서) 옵션에 대한 경험이있는 사람들에게 묻는 것보다 유용하지 않습니다. 여기에 묻는 것이 더 현명한 접근 방식으로 보이며이를 문서화하면 다른 사람들에게 도움이됩니다.
belacqua

답변:


5

다른 사람들이 쓴 것처럼 '붙여 넣기'설정을 남기고 싶지 않습니다. 방금 훌륭한 터미널 에뮬레이터와 올바르게 컴파일 및 구성 vim하면 '붙여 넣기'를 변경할 필요가 없음 을 지적하고 싶었습니다 . xterm 또는 GNOME Terminal과 같은 우수한 터미널 에뮬레이터, X11 기능이 포함 된 vim 및 'mouse'옵션이 'a'로 설정되어 있어야합니다. 그런 다음 vim마우스로 붙여 넣을 때 "알고" '붙여 넣기'옵션을 효과적으로 설정 및 설정 해제합니다.

vimX11 기능을 사용하는 한 가지 방법 gvim-v옵션 으로 실행 하거나 별명을 작성하는 것입니다.

alias vim='gvim -v'

그런 다음 넣어

set mouse=a

~ / .vimrc에.


mouse = a로 설정하면 텍스트를 복사 할 수 없습니다. 오른쪽 클릭 메뉴와 앱 메뉴에서 "복사"가 회색으로 표시됩니다.
이 다니엘 크로커

@LeeDanielCrocker : Copy일부 텍스트를 선택하지 않으면 회색으로 표시되거나 전혀 표시되지 않습니다. 복사 할 텍스트를 어떻게 선택합니까?
garyjohn

마우스 만 있으면됩니다. 참고로, "y"는 잘 작동합니다 ... 텍스트를 감지하고 시스템 키보드에 복사합니다. 작동하지 않는 메뉴 일뿐입니다. 마우스가 "r"로 설정되면 메뉴는 작동하지만 마우스에는 줄 번호가 포함됩니다. 전체적으로, 나는 mouse = a로 살 수 있습니다. 나는 단지 복사 대신에 k 거리는 것을 기억해야합니다.
Lee Daniel Crocker

7

이 게시물은 내가 가장 좋아하는 답변 https://coderwall.com/p/if9mda/automatically-set-paste-mode-in-vim-when-pasting-in-insert-mode

기본적으로 삽입 모드에서 시작하고 Ctrl + Shift + V를 사용하거나 마우스로 마우스 오른쪽 버튼으로 붙여 넣기를 사용하면 Vim은 이것이 터미널에서 온 것을 감지하고 자동으로 붙여 넣기 모드를 설정 한 후 한 번 설정을 해제하므로 다시 매핑 된 키를 잃지 않습니다. (원시 데이터를 작성하기 때문에 붙여 넣기 모드에서 작동 할 수 없음), 완료되면 "정상"상태로 돌아갑니다.

단지 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

Tmux에서 vim을 사용하는 경우 (여전히 .vimrc로 이동)

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()

let &t_SI .= "\<Esc>[?xxxxx"줄 중 하나가 키보드 붙여 넣기 단축키를 감지 한다고 가정 합니까? Mac에서도 작동하며 다른 단축키가 있습니까?
doub1ejack

@ doub1ejack 터미널이 Xterm 키 코드를 지원하고 Vim에 전달하는 한 Mac에서 잘 작동 해야하는 한 Xterm 이스케이프 시퀀스를 실제로 호출하는 방식이 아니라 Xterm 이스케이프 시퀀스를 감지합니다 (2004h는 붙여 넣기 시작입니다).
dragon788

omg. 너는 나의 영웅이야. 나는 이렇게 입력했다 : set nopaste 너무 많은 g'd 시간.
맥스웰

3

romainl이 제안한 바와 같이, 문서는 'paste'옵션 을 설정하면 다른 여러 옵션을 비활성화 할 수 있다고 설명하며 , 나중에 더 빨리 문제가 발생할 수 있음을 알게 될 것입니다. 이러한 이유로 'pastetoggle'옵션이 있습니다. 보다:

:help 'paste'
:help 'pastetoggle'

1

무언가 존재한다면 그 의미를 가져야합니다. vim 문서를 잘 살펴보면 매우 유용합니다.

  :help 'paste'
  :help 'pastetoggle'

일단 읽으면 다음을 원할 수 있습니다.

" Toggle paste mode
"   (prefer this over 'pastetoggle' to echo current state)
nmap <leader>p :setlocal paste! paste?<cr>

이 게시물이 유용하다는 것을 알기를 바랍니다. :)


1

IIRC를 vim에 붙여 넣으면 본질적으로 모든 문자를 직접 입력했다고 생각합니다. 따라서 자동 들여 쓰기가 설정되어 있으면 자동으로 들여 쓰기가되지만 붙여 넣은 텍스트에는 이미 들여 쓰기가 포함되어 있으므로 들여 쓰기가 실제로 "지워집니다". 붙여 넣기 모드로 전환하면 자동 들여 쓰기와 같은 항목이 꺼집니다.

입력시 자동 들여 쓰기를 좋아하는 경우 붙여 넣기를 마친 후 다시 붙여 넣기로 전환해야합니다. 그것을 시도하고 붙여 넣기 모드에서 수동으로 모든 들여 쓰기를 수행 해야하는 방법에 유의하십시오.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.