vim에 붙여 넣을 때 코드를 원본 소스로 유지하려면 어떻게해야합니까?


37

웹 페이지에서 일부 코드를 복사하여 VIM에 붙여 넣으면 다음과 같이 사다리와 같은 엉망 스타일이됩니다.

xxxxxx
   xxxxxx
      xxxxxx
         xxxxxxxxxx

정기적으로 엉망 .vimrc이되어서 다음과 같이 문제가 있다고 생각 합니다.

set number
set nocompatible
set nowritebackup
set noswapfile
syntax on
filetype indent on
filetype plugin on
filetype on
set background=light
set autoindent
set smartindent
set tabstop=4
set shiftwidth=4
set showmatch
set guioptions=T
set fileencodings=utf-8,prc
set ruler
set incsearch
map gs :%s
set t_Co=256
:colorscheme evening
filetype plugin indent on

보통 나는 VIM으로 파이썬을 작성하고 도움을 주시면 감사하겠습니다.


1
감사. 이것은 몇 년 동안 나를 자극했고, 나는 그것에 대해 아무에게도 묻지 않았습니다. +1.
DevSolar

답변:


50

이것을하기 전에 :

:set paste

그러고 나서:

:set nopaste

필요하지 않습니다 gvim; 붙여 넣을 때 자동으로 켜고 끕니다.
Benjamin Bannier

왜 그런지 아십니까?
Nathan Fellman

1
추측하기 : 일반 vim은 명령 줄일 뿐이며 클립 보드에 대해 "알지"않습니다. "붙여 넣기"를 입력 문자 시퀀스로 사용하고 자동 들여 쓰기를 적용합니다. GUI 인식 gvim은 들어오는 데이터가 클립 보드에서 온 것을 "알아"서 목적에 따라 자동 들여 쓰기를 비활성화 할 수 있습니다.
DevSolar

맞습니다. 터미널은 "붙여 넣기"작업을 원시 문자 입력으로 처리합니다.
Ignacio Vazquez-Abrams

이것은 순전히 vim 문제가 아닙니다-명령 프롬프트에서 이전 DOS 편집기에 붙여 넣는 것과 비슷한 영향을 줄 수 있습니다. 이 프로그램은 Windows 7 64 비트에서 누락 된 것 같습니다. 실제로는 오래된 16 비트 DOS 응용 프로그램이므로 업데이트해야하는 번거 로움이 없었기 때문일 것입니다. 그러나 Windows XP에서는 (1) 문자로 입력하여 실제적으로 느리게 작동하며 (2) 실제로 혼란스럽게 만듭니다.
Steve314

16

http://vim.wikia.com/wiki/Toggle_auto-indenting_for_code_paste

코드 붙여 넣기를위한 자동 들여 쓰기 전환

배경

Vim 명령을 사용하여 텍스트를 붙여 넣으면 예기치 않은 결과가 발생하지 않습니다. 다른 응용 프로그램에서 붙여 넣을 때와 GUI 버전의 Vim을 사용하지 않는 경우에만 문제가 발생합니다. 콘솔 또는 터미널 버전의 Vim에는 다른 응용 프로그램에서 텍스트를 붙여 넣는 표준 절차가 없습니다. 대신 터미널은 텍스트를 키보드 버퍼에 삽입하여 붙여 넣기를 에뮬레이션 할 수 있으므로 Vim은 사용자가 텍스트를 입력 한 것으로 생각합니다. 각 줄이 끝나면 Vim은 커서를 움직여 다음 줄이 마지막 줄과 같은 들여 쓰기로 시작합니다. 그러나 붙여 넣은 텍스트의 들여 쓰기가 변경됩니다.

붙여 넣기 전환

vimrc에 다음을 입력하십시오 (원하는 키로 변경).

set pastetoggle=<F2>

다른 응용 프로그램에서 붙여 넣기

  • 삽입 모드를 시작하십시오.
  • F2를 누르십시오 ( '붙여 넣기'옵션을 켜십시오).
  • 터미널을 사용하여 클립 보드에서 텍스트를 붙여 넣습니다.
  • F2를 누르십시오 ( '붙여 넣기'옵션을 끄십시오).

그런 다음 붙여 넣은 텍스트의 기존 들여 쓰기가 유지됩니다.

삽입 모드를 먼저 시작할 필요는 없지만 정상 모드에 있고 F2에 대한 맵핑이있는 경우 해당 맵핑이 적용되고 'pastetoggle'기능이 작동하지 않습니다.

일부 사람들은 vimrc에 대한 다음 대안으로 상태 표시 줄에 표시되는 시각적 피드백을 좋아합니다.

nnoremap <F2> :set invpaste paste?<CR>
set pastetoggle=<F2>
set showmode

첫 번째 줄은 일반 모드에서 F2를 누르면 '붙여 넣기'옵션이 반전되고 해당 옵션의 값이 표시되도록 매핑을 설정합니다. 두 번째 줄에서는 삽입 모드에있을 때 F2를 눌러 '붙여 넣기'를 켜거나 끌 수 있습니다. 세 번째 줄은 삽입 모드에서 '붙여 넣기'가 켜져 있는지 여부를 표시합니다.


1
핫키 솔루션의 경우 +1 F- 키를 이미 다른 것과 같은 것으로 매핑 한 VIM (나 같은)의
나쁘지 않은

우수-저는 이것을 사용하고 있습니다
hoju

<S- 삽입> 또는 <Ctrl + V>와 같이 원래 기능과 함께 자동으로 붙여 넣기 키를 매핑하는 이유는 무엇입니까? 또는 몇 초 동안 몇 개 이상의 입력 문자가 버퍼에 쓰여질 때 붙여 넣기를 비활성화하는 기능을 작성하십시오. 단지 아이디어입니다. 물론 거의 모든 키가 다른 것들에 매핑되어있어 고통입니다. , 나는 12 개의 F 키와 + 15 개의 더 많은 F 키 (G 키)를 가진 키보드를 가지고 있으며, 그로 인해 여전히 충분하지 않은 세 가지 레벨이 있습니다.) 그러나 그것은 저뿐입니다. 유일한 문제는, 어떤 ESC의 seqs는 시작의 붙여 넣기 영업 이익 ... 신호를 전송되지 얻을 오른쪽 클릭 메뉴입니다
osirisgothra

2

당신을 엉망으로 만드는 것은 자동 들여 쓰기입니다.

set autoindent
set smartindent

코드를 잘라 붙여 넣을 때 비활성화 한 다음 완료되면 다시 활성화하십시오.


-2

이를 달성하기위한 가장 적은 노력은 .vimrc다음과 같습니다.

:set paste

그런 다음 코드를 붙여 넣습니다.


3
'paste'옵션은 영구적으로 설정되지 않았습니다. 매핑 및 약어를 포함하여 많은 것을 비활성화합니다. 게다가, 이전 답변은 이미 'paste'옵션을 다룹니다 .
Heptite

2
슈퍼 유저에 오신 것을 환영합니다! 이것은 기존 답변을 복제하고 새로운 내용을 추가하지 않습니다. 실제로 새로운 내용이 없다면 답변을 올리지 마십시오.
Toby Speight
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.