ทำลายลำดับการเลิกทำด้วยตนเอง
<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
โทรเพิ่มเติมในตอนท้าย
:help
ไฟล์ที่เกี่ยวข้อง ... ดู: ฉันจะดีบักไฟล์ vimrc ของฉันได้อย่างไร ... นอกจากนี้การใช้<C-c>
เพื่อออกจากโหมดแทรกอาจมีผลข้างเคียง ( ดูสิ่งนี้ ) และอาจเป็นส่วนหนึ่งของปัญหา ... ฉันขอแนะนำให้ใช้Esc
หรือ<C-[>
( ดูสิ่งนี้ )