답변:
을 사용하여 삽입 모드에서 실행 취소 시퀀스를 수동으로 해제 할 수 있습니다 <C-G>u
. 에서 도움 :
CTRL-G u break undo sequence, start new change
iHello<C-G>u world!<Esc>u
이것은 당신에게 텍스트를 남길 것입니다
Hello
i " Enter Insert mode
Hello " Type 'Hello'
<C-G>u " Break the undo sequence
world! " Type ' world!'
<Esc> " Return to Normal mode
u " Undo
다음은 텍스트 삭제를 시작할 때와 삭제 후 다시 텍스트를 입력 할 때 실행 취소 나누기를 만드는 데 사용 되는 VimScript 의 작은 조각입니다<C-G>u
.
function! s:start_delete(key)
let l:result = a:key
if !s:deleting
let l:result = "\<C-G>u".l:result
endif
let s:deleting = 1
return l:result
endfunction
function! s:check_undo_break(char)
if s:deleting
let s:deleting = 0
call feedkeys("\<BS>\<C-G>u".a:char, 'n')
endif
endfunction
augroup smartundo
autocmd!
autocmd InsertEnter * let s:deleting = 0
autocmd InsertCharPre * call s:check_undo_break(v:char)
augroup END
inoremap <expr> <BS> <SID>start_delete("\<BS>")
inoremap <expr> <C-W> <SID>start_delete("\<C-W>")
inoremap <expr> <C-U> <SID>start_delete("\<C-U>")
이것은 작동합니다 <BS>
, <C-W>
(단어를 삭제)하고, <C-U>
(라인의 시작으로 삭제). 삽입 모드에서 삭제하는 방법이 더 있으면 inoremap
끝에 통화를 추가하여 지원할 수 있습니다 .
<C-G>u
이 너무 늦습니다.
i
가 작성한 내용의 일부를 제거하기 위해 긴 문장 다음에 백 스페이스가옵니다 (모두 삽입 모드). 그런 다음 백 스페이스를 사용해서는 안되며 작성한 내용이 양호하다는 것을 알았습니다. 실행 취소하지만 삽입 된 전체 텍스트가 취소됩니다. 그래서 긴 문장이나 백 스페이스가없는 부분이 남지 않았습니다. 백 스페이스 부분을 되 돌리는 것은 불가능합니다. 백 스페이스에서 실행 취소 시퀀스를 중단하도록 vim에 지시하는 방법이 있습니까? (이제 말하면 map
백 스페이스는 옵션입니다.)
inoremap <CR> <C-G>u<CR>
각 실행 취소가 한 줄에 포함되도록 추가했습니다 (논스톱으로 입력 한 전체 단락을 더 이상 실행 취소하지 않음).
:help
파일 에서 아무것도 찾을 수 없습니다 ... 참조 : vimrc 파일을 어떻게 디버깅합니까? ... 또한, 사용하여<C-c>
부작용이있을 수 있습니다 종료 삽입 모드로 ( 이 참조 )와 수 문제의 일부가 될 ... 내가 사용 제안Esc
이나<C-[>
( 이 참조 )