삽입 모드에서 <CR> 실행 취소


21

때로는 삽입 모드에서 <CR>실수로 맞았으며 백 스페이스를 여러 번 칠해야합니다 (들여 쓰기에 따라 다름).

예 :

<div>
  <p> This is some text []</p>
</div>

커서는 []내가 쳤다 <CR>:

<div>
  <p> This is some text 
  []</p>
</div>

이제 이전 줄로 돌아가려면 백 스페이스를 두 번 눌러야합니다 (이 경우는 나쁘지 않지만 들여 쓰기가 많지 않습니다).

더 나은 방법을 알고 있습니까?


1
ctrl+w두 번 작동하고 꽤 쉬운 것 같습니다
reergymerej

답변:


10

어때요?

inoremap <C-\> <C-o>:left 0<Cr><BS>

<C-o>일반 모드 명령 ( :left 0) 을 실행하면 들여 쓰기가 모두 제거되고 커서가 줄의 시작 부분에 놓입니다. <BS>마지막 줄로 돌아갑니다.

이것은 "뒤로 J" 와 조금 같습니다 .

불행히도 Shift + Enter 또는 Ctrl + Enter를 매핑하는 것은 불가능한 것 같아서 <C-\>"입력 근처"인 것으로 선택합니다 .


"입력 근처"는 키보드에 따라 다릅니다. 영국 키보드 왼쪽에``-왼쪽 이동 :-)이 있습니다.
TripeHound

2
<C-u>대신에 사용 하지 <C-o>:left 0<CR>않습니까?
jamessan

는 "이전 버전과 같은이 작품을 @jamessan J"그래서이 foo<CR>bar<C-\>당신을 떠날 것이다 foobar. IMHO 더 유용하지만 YMMV입니다.
Martin Tournoij

맞습니다. 그러나 내가 말하는 것은 <C-u>(즉, i_CTRL-U ) 는와 같아야 한다는 것 <C-o>:left 0<CR>입니다.
jamessan

1
@jamessan 커서 위치에 따라 다릅니다. 입력 foo<CR>bar<C-u>하면 foo<CR>(+ Vim이 추가 한 자동 들여 쓰기). <C-o>:left 0<CR>커서 위치에 관계없이 항상 동일하게 작동합니다.
Martin Tournoij

21

나는 내 안에 이것을 가지고 있으며 vimrc, 두 번째 부분은 관련이 있습니다.

inoremap <expr> <silent> <cr> pumvisible() ? "<c-y>" : "<c-g>u<cr>"

이것이하는 일 : Enter삽입 모드에 도달 할 때마다 "실행 취소 시퀀스를 깨고 새로운 변경을 시작합니다"(참조 h: i_CTRL-G_u). 즉, Enter실수로 쳤다면 Statox가 제안한대로 또는로 삽입 된 이전 줄을 제거하지 않고 변경을 취소 할 수 있습니다 . 기본적으로 각 줄은 개별적으로 취소 할 수 있습니다.ESC u aCtrl-o u

출처

편집 / 업데이트 : Emacs, 즉 evil-mode 에서 Vim 에뮬레이션을 사용 하는 경우 비슷한 효과를 위해이 패키지 를 사용할 수 있습니다 .


이제 첫 번째 부분과 <c-y>팝업 메뉴 와의 관계가 궁금 합니다.
8bittree

2
이 답변을 참조하십시오 : vi.stackexchange.com/a/3844/1800 . Ctrl-y삽입 모드에서 현재 팝업 선택이 완료되고 위의 매핑도 Enter완료됩니다.
VanLaser

좋은 트릭. 그러나 아마도 마지막 부분을 "<c-g>u<cr>"로 대체 할 것입니다 &paste ? "<cr>" : "<c-g>u<cr>". 그렇지 않으면 다음에 실수로 200 줄의 HTML을 붙여 넣을 때 실행 취소하는 것이 재미있을 것입니다. :)
lcd047

2
... 및 설명 : 설정하면 paste삽입 모드 매핑이 비활성화됩니다 (Vim의 도움에 따라)
VanLaser

1
Backspace, Ctrl-W 및 Ctrl-U에 의존하는 다른 솔루션은 backspace옵션 설정 방법에 따라 작동하지 않을 수 있기 때문에이 솔루션을 더 좋아합니다 .
doubleDown

4

내가하는 방법은 Ctrl-wBackspace입니다.

Ctrl-w마지막 단어를 삭제하려면 (이것이 표준 vim인지 잊었는지 잊어 버렸습니다.) 단지 공백이므로 줄의 처음으로 돌아갑니다. 그런 다음 Backspace내가 있던 이전 줄로 다시 돌아갑니다.


Sweet, 나는 Ctrl-w인서트 모드에서 의 사용에 대해 몰랐다 . 그러나 Carpetsmoker ♦는 여전히 더 빠릅니다. 따라서`Ctrl- \`의 기본 바인딩은 그렇게 유용하지 않습니다.
nobe4

1
Ctrl + w는 "standard Vim"입니다. ;-) 다음을 참조하십시오 : :help i_CTRL-W. 그리고 그것을 두 번 누르면 트릭을하는 것처럼 보입니다.
Martin Tournoij

1
도움말 페이지에 난 그냥 보았다 <C-u>는 새 줄에 모든 문자를 삭제로 더 유용 할 수있다
nobe4

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