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 inoremap
cuộc gọi bổ sung vào cuối.
:help
tệ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ụngEsc
hoặc<C-[>
( xem phần này )