시프트 인서트가 왜 인서트 모드에서만 작동합니까?


13

vim을 사용하여 일부 내용 (CentOS 서버의 Git Bash에서)을 파일에 붙여 넣으려고했습니다.
방금 파일을 열고 shift+를 사용해 보았는데 insert상반기 (거의)가 잘리는 것을 알았습니다.하지만 vim을 삽입 모드로 설정하고 shift+를 누르면 insert모든 것이 완벽하게 붙여 넣습니다.
왜 이것이 궁금한가요?

감사


이봐, 나도 엄지 손가락이 두 개나있어 !!! : D
RonJohn

답변:


24

모두 Shift+ Insert와 " 붙여 넣기 유사한 방법으로 터미널없이 행동으로는"- 그들은 키 입력을 에뮬레이션.

이것은 터미널에서 작성하기가 불가능한 중요한 차이점입니다. 입력하거나 붙여넣고 있습니까? 참고 : 일부 터미널은 " 괄호 붙여 넣기 "모드를 지원 합니다. @ Josh의 의견 후에도 xterm 에서 vim 플러그인 괄호 붙여 넣기를 보았습니다 .

붙여 넣은 데이터는 삽입 모드로 들어가는 첫 번째 문자까지 손실됩니다. 커서가 이동하고 파일의 다른 부분이 변경된 것을 발견 할 수도 있습니다 (예 : 대소 문자 변경 / 삭제 등) ...

요약하면, 파일에 삽입하려는 텍스트를 붙여 넣을 경우 먼저 삽입 모드를 시작하십시오.


다음 텍스트를 복사하여 Vim을 실행하는 터미널에 삽입하십시오 (삽입 모드 아님).

hello how are you

결과는 키보드에서 같은 문자를 입력하는 것과 같습니다.

Vim에 붙여 넣은 결과

이 경우 삽입 모드가됩니다 ...

이제 삽입 모드를 종료 Esc하고 다음을 붙여 넣으십시오.

/are
n

"are"를 검색합니다 :

Vim에 붙여 넣은 결과

이제 붙여 넣기

:0
dG

오 안돼 ... 다 사라졌어!

모두 사라졌다


들여 쓰기를 활성화 한 경우 코드 블록을 vim에 삽입하면 (삽입 모드에서) 너무 많이 들여 쓰기됩니다. 자동 들여 쓰기가되고 붙여 넣은 코드에 들여 쓰기가 포함됩니다.

def my_print(message):
    print(message)
    print('done...')

붙여 넣기 코드

이 문제를 해결하려면 :set pasteand :set nopaste명령을 사용하십시오.

붙여 넣기 코드 (붙여 넣기 모드)


4
"이것은 터미널이 만들 수없는 중요한 차이점입니다. 입력하거나 붙여넣고 있습니까?" -이것은 완전히 사실이 아니며 일부 터미널 및 응용 프로그램은 붙여 넣은 텍스트 전후에 특수 시퀀스가 ​​전송되는 "브래킷 붙여 넣기"를 지원합니다.
Josh

@ 조쉬 : 흥미롭고, 감사합니다 ... 귀하의 의견은 심지어 vim 플러그인으로 연결됩니다
Attie

내가 방해하는 유일한 사람 set nopaste입니까? 기대 unset paste합니다.
Eric Duminil

@ThisGuyHasTwoThumbs는 대안으로 적어도 Vim을 사용할 "+때 시스템 클립 보드와 상호 작용 하기 위해 레지스터 를 사용하는 것이 좋습니다. 단점은 Vim의 일부 시스템 또는 빌드가 "*대신 사용 하거나 시스템 클립 보드를 지원하지 않지만 내 경험상 "+상당히 신뢰할 수 있다는 것입니다.
8bittree
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.