回答:
を使用すると、挿入モードで元に戻すシーケンスを手動で解除できます<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
は、最後に追加の呼び出しを追加することでサポートできます。
<C-G>u
、もう手遅れになります。
i
その後に長い文を書き、その後にバックスペースを続けて、私が書いたものの一部を削除します(すべて挿入モード)。それから、私はバックスペースを入れるべきではなく、私が書いたものは大丈夫であることに気づきました。元に戻しますが、挿入したテキスト全体が元に戻ります。ですから、私は長い文章がないか、バックスペースされていない部分が残っています。バックスペース部分を元に戻すことはできません。バックスペースで元に戻すシーケンスを解除するようにvimに指示する方法はありますか?(私が言うように、map
バックスペースを使用することはもちろんオプションです)。
inoremap <CR> <C-G>u<CR>
ために、各取り消しが1行に含まれるように追加しました(ノンストップで入力していた段落全体を取り消すことはありません)。
:help
ファイルに関する情報も見つかりません...参照:vimrcファイルをデバッグするにはどうすればよいですか?...また、<C-c>
挿入モードを終了するためにを使用すると、副作用が発生する可能性があり(これを参照)、問題の一部になる可能性があります...Esc
または<C-[>
(これを参照)を使用することをお勧めします