मैन्युअल रूप से पूर्ववत क्रम को तोड़ना
आप मैन्युअल रूप से सम्मिलित करें मोड में पूर्ववत क्रम को तोड़ सकते हैं <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
इसके बारे में फ़ाइलों में कुछ भी नहीं ढूँढ सकता ... देखें: मैं अपनी विम फ़ाइल को कैसे डीबग करूँ? ... इसके अलावा,<C-c>
एक्सर्ट इन्सर्ट से बाहर निकलने के साइड-इफेक्ट्स हो सकते हैं (इसे देखें ) और समस्या का हिस्सा हो सकता है ... मैं सुझावEsc
<C-[>