complex repeat

http://vim.g.hatena.ne.jp/ka-nacht/20091118/1258506825 でツッコミもらったのでちょいと手直し。 digraph 入力と key の literal な入力がごっちゃになっていたところを修正。

いわゆる macro と呼ばれている、かどうかは知らないや。とにかく今までおれが macro だと思っていたもの。つーのも :help macro しても key mapping に関する説明が出てくるのでまぁ違うものなんだろうと脳内 index を修正。で、肝心の complex repeat に関してはえーとたしか q なんたらで記録を開始したよなぁという記憶があったので :help q してみたらあたった。読み進めると複雑な操作を recording して executing が大勝利ということらしい。

で、どこに recording するのかというと named register ですと答える次第で。 execute ってのは指定した register に入ってる文字列を command の羅列とみなして実行する機能らしい ( normal command と解釈するか ex command として解釈するかは指定できる ) 。だから :display で complex repeat の内容を確認できるし qX のように大文字を指定すると追加 recording ができるわけか。てか named register の大文字指定ってこれがあるから生きてくるのか。既存の操作に何か付け加えるのが容易になるもんなぁ。

でも毎回 qxq で recording する必要はなくて、わかるんなら :let @x="Yp^A" ( "^A" は <C-k><C-a><C-a> <C-v><C-a> もしくは <C-q><C-a> で入力する ) みたいに直接書いちゃってもいいわけだよな。で、これを使うと complex repeating の可搬性がぐっと増す、と。

早速なんか ftplugin に書けるかなと思ったけどよく考えてみたら command の羅列ってことは別に関数定義するのと変わらないわけで、そうすると register をひとつ無駄に消費するってことになっちゃうな。っていや呼び出しの cost が…、 mapping を使えば違わないか。 @x と打つのと :call Func() と打つのとでは前者の方が圧倒的に楽だけど :nnoremap <Leader>f :call Func()<CR> とか .vimrc に書いておけば問題にならないよな。てことは最終的に register 消費か mapping 設定を書くかという問題になるわけで、そうするととりあえず register に登録しておいた complex repeating が使えるなら関数にまとめてしまって mapping も定義しとく、みたいな流れが予想される。ってやっぱり ftplugin に complex repeating 書くのはダメなんじゃないか ( ここまで 43 秒 ) 。あー別に関数じゃなくてそのまま mapping 定義ていう選択肢もある…、ことはあるけどそれは全部自分で管理できるという前提だな。