haya14busa

haya14busa’s memo

VimのインサートモードでUndo履歴を区切る(改行、削除コマンド)

Undo履歴区切ろう

実践Vimにて

アンドゥコマンドの粒度

実践Vim 思考のスピードで編集しよう! [単行本(ソフトカバー)]

Drew Neil
アスキー・メディアワークス 2013-08-29
¥ 2,940

実践Vim読んでるときって基本Vimちゃんすごい!Vimちゃんこんなこともできたの!?Vimちゃん大好き!なのですが、ここまでするものなのかと、若干DrewNeilさんに引いて感動してしまった部分が1つだけありました。

(略) 行を挿入する一番簡単な方法は<CR>を押すことだ。だけど、筆者がよく使うのは<Esc>o。これは単に、アンドゥする単位を新規に作りたいからだ。ハードコアすぎるって?いやいや心配はいらない。Vimに慣れてくれば、モードの切り替えなんてちょちょいのちょいになるから。

実践Vim 思考のスピードで編集しよう! [単行本(ソフトカバー)]

流石にハードコアすぎる…Vim意識高すぎる!

と、言うことで(Pure)Vim力低いし、<CR><Esc>o使い分ける必要も無さそうなのでvimrcでカスタマイズ。

vimrc書き書き

vimrc

“ For Undo Revision, Break Undo Sequence
inoremap <CR> <C-]><C-G>u<CR>

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

:h i_CTRL-G_u

<C-o>の一時コマンドモードで副作用的にUndoを区切るのではなく、まさにやりたいことそのまんまのコマンド(i_CTRL-G_u)が用意されていたようです。知らなかった…

改行ついでに削除系インサートコマンドでも<C-g>u噛ませることに。便利。<C-h>に限って言えば区切りすぎウザイ感あるのでいらないかも。

<C-d>だけデフォルトのキーマップじゃないですが、デフォルトの動作はインサートモードでインデント下げるという誰得機能なので変えても良さそう。

Comments