항상 : set paste를 사용하십시오. 좋은 생각입니까? 붙여 넣으면 종종 코드

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



답변

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

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

alias vim='gvim -v'

그런 다음 넣어

set mouse=a

~ / .vimrc에.


답변

이 게시물은 내가 가장 좋아하는 답변 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()


답변

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

:help 'paste'
:help 'pastetoggle'


답변

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

  :help 'paste'
  :help 'pastetoggle'

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

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

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


답변

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

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


답변