vim에서 붙여넣기 실행 취소

vim에서 붙여넣기 실행 취소

나는 실행 취소 및 다시 실행에 대해 알고 u있습니다 Ctrl-r. 하지만 u마지막으로 저장된 상태로 돌아갑니다. 붙여넣기를 취소하는 방법을 알고 싶습니다 cmd-v.

예를 들어,

I am typing here bla bla bla, [link to website](here I paste a wrong http link 
with cmd-v)

그럼 나는 다시 돌아가고 싶다.

I am typing here bla bla bla, [link to website](

vim에서 할 수 있는 방법이 없을까요?

미리 감사드립니다.

답변1

면책 조항: 저는 ctrl 대신 cmd를 사용하는 Apple 키보드가 vim과 어떻게 상호 작용하는지 전혀 모르므로 이 중 일부를 변경하거나 미세 조정해야 할 수도 있습니다.

vim에 붙여넣는 올바른 방법은 p명령을 사용하는 것입니다. 시스템 클립보드에서 붙여넣으려면 를 사용합니다 "*p. 따라서 작업을 수행하는 표준 방법은 삽입 모드를 종료하는 것입니다 "*pa( a물론 은 삽입 모드로 다시 들어갑니다).

삽입 모드 내에서 사용할 키보드 단축키를 갖고 싶다면 다음과 같이 하는 것이 자연스러워 보일 것입니다:

inoremap <c-v> <esc>"*pa

(즉, Ctrl+V를 누르고 Esc를 누르는 대신 실제로 내용을 입력하세요.)

얼핏 보면 이렇게 보일 것 같다~해야 한다원하는 동작을 제공하세요. 위에서 설명한 표준 붙여넣기 프로세스를 자동화하는 것뿐입니다. 그러나 그렇지 않습니다. Vim은 명령의 모든 부분을 동일한 실행 취소 블록의 일부로 취급하며 vim에게 삽입 모드 자체는 일종의 명령입니다.

그러나 삽입 모드에 있는 동안 ctrl+g를 입력하고 이어서 새 실행 취소 블록을 수동으로 시작할 수 있습니다 u. 따라서 다음과 같이 키 재매핑을 수정할 수 있습니다.

inoremap <c-v> <c-g>u<esc>"*pa

<c-v>이 모든 것은 ctrl+v로 작동합니다(방금 Windows에서 테스트했으며 적어도 거기에서는 작동합니다). vim 내의 cmd 기반 단축키에 대해 다른 것( 가 아닌)을 사용해야 할 수도 있습니다 . Apple 키보드를 사용하고 있다면 OSX를 의미합니다. cmd+v가 시스템 단축키라면 무엇이 우선순위인지 잘 모르겠습니다. 일부 피상적인 인터넷 검색에서는 cmd가 vim과 제대로 작동하도록 하려면 일부 OS 수준 구성을 조정해야 할 수도 있다고 제안합니다.

답변2

Edit > PasteMacVim에서는 바로가기를 무시하려면 메뉴 항목 의 매핑을 해제해야 합니다 . 그런 다음 Cmd-V( D-vMacVim 용어로)를 각 모드의 적절한 명령에 다시 매핑할 수 있습니다. 나는 이것을 my에 추가했고 ~/.gvimrc이제 모든 것이 훌륭하게 작동합니다.

macmenu Edit.Paste key=<nop>
noremap <D-v> "*P
cnoremap <D-v> <C-r><C-o>*
inoremap <D-v> <C-g>u<C-r><C-o>*

<C-g>u실행 취소 기록을 수정하려면 삽입 모드에서만 필요합니다 . 및 일반 모드와 명령 모드에서 기본 붙여넣기 동작을 복원하는 것뿐입니다 noremap.cnoremap

여기서 올바른 방향을 알려준 evilsoup에게 감사드립니다.

관련 정보