Geri alma dizisini manuel olarak kırma
Geri alma sırasını Ekle modunda manuel olarak kırabilirsiniz <C-G>u
. Gönderen yardımı :
CTRL-G u break undo sequence, start new change
Misal
iHello<C-G>u world!<Esc>u
Bu size metin bırakacaktır
Hello
Komutların dökümü
i " Enter Insert mode
Hello " Type 'Hello'
<C-G>u " Break the undo sequence
world! " Type ' world!'
<Esc> " Return to Normal mode
u " Undo
Otomatik çözüm
İnce taneli geri alma seviyesi kontrolü
Metni silmeye başladığınızda ve ayrıca bir silme işleminden sonra tekrar metin girmeye başladığınızda geri alma sonları oluşturmak için kullanılan küçük bir VimScript snippet'i<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>")
notlar
Bu <BS>
, <C-W>
(bir kelimeyi silme) ve <C-U>
(satır başına kadar silme) için çalışır. Ekle modunda silmenin daha fazla yolu varsa inoremap
, sonuna ek aramalar eklenerek bunlar desteklenebilir .
:help
dosyalarda hiçbir şey bulamıyorum ... Bkz: vimrc dosyamda nasıl hata ayıklayabilirim? ... Ayrıca,<C-c>
ekleme modundan çıkmak için kullanmanın yan etkileri olabilir (buna bakın ) ve sorunun bir parçası olabilir ... Kullanmayı öneririmEsc
veya<C-[>
(buna bakın )