Undo履歴区切ろう
実践Vimにて
アンドゥコマンドの粒度
実践Vim読んでるときって基本Vimちゃんすごい!Vimちゃんこんなこともできたの!?Vimちゃん大好き!なのですが、ここまでするものなのかと、若干DrewNeilさんに引いて感動してしまった部分が1つだけありました。
(略) 行を挿入する一番簡単な方法は
<CR>
を押すことだ。だけど、筆者がよく使うのは<Esc>o
。これは単に、アンドゥする単位を新規に作りたいからだ。ハードコアすぎるって?いやいや心配はいらない。Vimに慣れてくれば、モードの切り替えなんてちょちょいのちょいになるから。
流石にハードコアすぎる…Vim意識高すぎる!
と、言うことで(Pure)Vim力低いし、<CR>
と<Esc>o
使い分ける必要も無さそうなのでvimrcでカスタマイズ。
vimrc書き書き
vimrc
inoremap <C-h> <C-g>u<C-h> inoremap <BS> <C-g>u<BS> inoremap <Del> <C-g>u<Del> inoremap <C-d> <C-g>u<Del> inoremap <C-w> <C-g>u<C-w> inoremap <C-u> <C-g>u<C-u>
helpる。helpる。さまよう…あった!
CTRL-G u break undo sequence, start new change i_CTRL-G_u
<C-o>
の一時コマンドモードで副作用的にUndoを区切るのではなく、まさにやりたいことそのまんまのコマンド(i_CTRL-G_u
)が用意されていたようです。知らなかった…
改行ついでに削除系インサートコマンドでも<C-g>u
噛ませることに。便利。<C-h>
に限って言えば区切りすぎウザイ感あるのでいらないかも。
<C-d>
だけデフォルトのキーマップじゃないですが、デフォルトの動作はインサートモードでインデント下げるという誰得機能なので変えても良さそう。