Vim이 붙여 넣은 코드를 잘못 들여 쓰는 이유는 무엇입니까?


100

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"
#                                                       

해시 표시 (#) 및 탭이 나타납니다. 왜?


31
이것은 vi.stackexchange.com에 대한 더 좋은 질문 일 수 있습니다
Eric Renouf

@EricRenouf 왜? (정직한 질문)
Qix

3
@qix 내 생각에 이것은 vim이 어떻게 작동하는지에 대한 질문인데 * nix에서 사용되는 일반적인 도구이지만 * nix는 vim을 사용하기위한 필수 조건은 아닙니다.
Eric Renouf

1
@JaredBurrows 나는 그것이 그것이되기를 희망한다
Eric Renouf

1
붙여 넣기를 어떻게 시작합니까? 마우스로?
Ben Voigt

답변:


122

두 가지 이유가 있습니다.

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이없는 시스템에서는 *레지스터 를 사용해야합니다 . Linux와 같은 X11 시스템에서는 두 가지를 모두 사용할 수 있습니다.

추가 자료


2
나는 Vim을 영원히 사용했으며 이것에 대해 전혀 몰랐습니다. 많은 감사합니다.
Caja

대부분의 최신 그래픽 터미널 에뮬레이터는 "브래킷 붙여 넣기 모드"라는 기능을 지원합니다. Vim은 터미널에이 모드를 활성화하도록 요청할 수 있으며,이 모드에서는 붙여 넣기 된 텍스트를 특정 이스케이프 시퀀스로 둘러 쌉니다. Vim은이를 인식하고 페이스트 기간 동안 랩핑 / 들여 쓰기를 끌 수 있습니다. 긴 스토리 중지 : 붙여 넣기가 "예상대로 작동"합니다. vim 사용자는 아니지만 빠른 웹 검색을 통해이 모드를 구성하는 방법을 알려줄 것입니다.
egmont

2
@MichaelDurrant set paste는 절대 vimrc에 없어야 합니다. 삽입 모드 매핑, 명령 줄 매핑, 약어, 텍스트 너비, 줄 바꿈, 자동 들여 쓰기, 스마트 들여 쓰기, 소프트 탭 중지, 형식 옵션, 들여 쓰기 및 기타 몇 가지를 포함하여 많은 것을 비활성화하거나 재설정합니다. :h paste전체 목록이 있습니다. 대부분의 사람들은 이러한 것들 중 일부 또는 전부를 사용하며 왜 설정이 무시되는지 궁금합니다.
FDinoff

4
나는 보통 :r!cat그대로 붙여 넣기에 사용 합니다.
Simon Richter

1
와의 상호 작용에 대해 논의 해 볼 가치가 있습니다 set mouse. 마우스 클릭으로 붙여 넣기시 자동으로 붙여 넣기 모드를 시작하고 종료 할 수 있습니다.
Ben Voigt

36

vim paste를 사용하십시오. 당신이 원하는 것은 클립 보드 버퍼에있는 것을 붙여 넣는 것입니다 "+p

+그러면를 선택하여 붙여 넣습니다.

Linux를 사용하는 경우 *X / 중간 클릭 버퍼 (마지막으로 선택한 텍스트)입니다.

그런 다음 vim은 그것이 페이스트라는 것을 알고 있습니다.

그렇지 않으면 vim은 붙여 넣은 키를 입력했다고 생각하고 붙여 넣기 끝까지 자체 자동 들여 쓰기 (복사 들여 쓰기 맨 위에)를 수행합니다.

SSH를 통해 작동하려면 클립 보드 공유 옵션을 설정해야합니다. -Y

자세한 내용 man ssh은 참조하십시오.


4
이것은 실제로 정답 이럴이다
크리스토퍼 Sall이-Storgaard

그래픽 vim ( gvim) 에서만 작동하는 것 같습니다 . 터미널 에뮬레이터에서 실행되는 vim은 마지막으로 삭제 된 텍스트를 현재 선택이 아닌 "* p"로 붙여
넣습니다

터미널 vim 만 gvim을 사용하지 않습니다. 마우스 설정은 무엇입니까? 내 마우스 설정은 c입니다. 마우스 선택이 허용 될 때 어떻게 작동하는지 확실하지 않습니다. set mouse?
exussum

2
또한 vim --version클립 보드 지원으로 컴파일 되었는지 확인 하십시오 +xterm_clipboard. 출력에
exussum

@ wurtel : 아마도 클립 보드를 unnamed문자열로 설정했을 것입니다 .
cuonglm

8

자동 들여 쓰기가 설정되어 탭이 삽입 :set noai되었으며 터미널에 붙여 넣기 전에 자동 들여 쓰기 ( )를 해제하여 해당 동작을 비활성화 할 수 있습니다 .

주석 처리 된 행은 자동 주석 처리로 생성되며 해당 주석을 해제하여 비활성화 할 수 있습니다.

그 대신 토글을 사용하여 원하는 동작을 수행하고 :set paste형식이 지정된 코드를 붙여넣고 :set nopaste정상적인 동작을 복원 해야합니다 .

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