即席キーバインドとマクロの使い所
( ´_ゝ`)ノシ
本記事は Vim その2 アドベントカレンダー 19日目の記事です。
18日目
20日目
内容的にノーマルモードのhjkl,wbeを普通に使うようになってて
fやtにcdyを組み合わせられるようになった程度の人向けです。
即席キーバインドとは
vimrcに登録せずにその場限りでキーバインドを設定
汎用性を気にせずその場の作業を楽にすることだけ考えてやる。
使う目的
キー入力が2,3回かそれ以上必要な操作をキーバインド設定して
1回で済むようにする。
組み立て方
- カーソル行内の目的の場所にカーソルを移動させる
- テキストの編集操作
- 次の行に移動する
上記の中から1個または2個以上を上から順に組み合わせ
使用例
gistaea339ba773caed87fd108a57ffb565b
上記のようなipの一覧でドットを超えて次の数値の頭に移動する場合、
wを2回、前の数値に移動する場合はb2回を押す必要があります。
こういう時に
:nnoremap w ww :nnoremap b bb
と入力すると1回で数値の頭に移動が可能になります。
行の上下移動する時にjkで行頭移動したい場合なら
:nnoremap j + :nnoremap k -
とやるとjkで上下移動しつつ行頭に移動できます。
既存のキーバインドの差し替えですが
+-のキーバインドを多用する作業の場合ならそれがホームポジションの
jkでできるようにすることに価値はあると思います。
設定するキーに困る場合は<F1><F2>のファンクションキー、
ファンクションキーの無いキーボードだと
e, Shift+e, C-e 当たりがおすすめです。
テキストの編集操作の即席キーバインド例がないのは
ドットリピート使えば何とかなるからです。
テキスト編集個所に応じてペーストするものが違う場合は
レジスタが使えます。(詳細は以下の記事参照)
マクロ
q+アルファベット1文字とかでvimの操作を最後にqを入力するまで記録する。
(詳細は以下の記事参照)
使う目的
大体即席キーバインドと同じ。
即席キーバインドと違う点
@+記録時に指定していたアルファベットで実行
適切なキーバインド思いついてなくてもやりたい操作を記録出来る事
1回のマクロ記録で出来ない操作は分けて記録できる
(qa+記録する操作+q, qb+記録する操作+q, qc+記録する操作+q....)
使用例
元ネタ
gistc448121d75e389495938be44d9ecba2a
リンク先の問題通りに全部順番入れ替えるのは大変なので
@とそれより前の部分を後ろに持っていって
master.email.ne.jp@ntsuda
となるような操作をマクロに記録します
操作は以下の通り。最初のqqでレジスタqにマクロの記録取得を開始しています。
最後のqで記録終了です。
qqA@<ESC>0dw$p0xjq
上手く記録できている場合そのまま
@q
すると次の行のメールアドレスが一番最初の行と同じように修正されるはずです。
3@q
と入力して3回マクロを繰り返すように操作すると3行連続で修正されます。
この時、同じ行で3回繰り返しにならないのはマクロの記録の一番最後ですぐ下の行に移動するjを1回入力して
マクロの繰り返し実行に対応させているからです。
上手く記録できているか確認する場合は
:reg
で "q の行を確認して下さい。
まとめ
どちらもコツは1行あたりの処理を考える+次の行に移動する操作を足す、になります。
編集するテキストが整形されていて同じ桁の位置から入力・削除などの編集を何十行何百行と行う場合は矩形編集(v, Shift+v, Ctrl+v)がいいかもしれません。
明日のvim その2 アドベントカレンダーは 20日目です。