Tự phá vỡ chuỗi hoàn tác
Bạn có thể tự ngắt chuỗi hoàn tác trong chế độ Chèn với <C-G>u. Từ sự giúp đỡ :
CTRL-G u break undo sequence, start new change
Thí dụ
iHello<C-G>u world!<Esc>u
Điều này sẽ để lại cho bạn với các văn bản
Hello
Phân tích các lệnh
i " Enter Insert mode
Hello " Type 'Hello'
<C-G>u " Break the undo sequence
world! " Type ' world!'
<Esc> " Return to Normal mode
u " Undo
Giải pháp tự động
Kiểm soát hoàn tác cấp độ hạt mịn hơn
Đây là một đoạn nhỏ của VimScript sử dụng <C-G>uđể tạo các ngắt hoàn tác khi bạn bắt đầu xóa văn bản và cả khi bạn bắt đầu nhập lại văn bản sau khi xóa.
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>")
Ghi chú
Điều này sẽ làm việc cho <BS>, <C-W>(xóa một từ) và <C-U>(xóa đến đầu dòng). Nếu có nhiều cách để xóa trong chế độ Chèn, chúng có thể được hỗ trợ bằng cách thêm các inoremapcuộc gọi bổ sung vào cuối.
:helptệp về nó ... Xem: Làm cách nào để gỡ lỗi tệp vimrc của tôi? ... Ngoài ra, sử dụng<C-c>để thoát chế độ chèn có thể có tác dụng phụ ( xem phần này ) và có thể là một phần của vấn đề ... Tôi sẽ đề nghị sử dụngEschoặc<C-[>( xem phần này )