2009年6月17日水曜日

Vim: 同じ高さのインデントに移動



プロトコルが複雑なデバドラ等のコードの場合、switch-case文が長かったりネストしていたりと一画面に収まらない場面がある。そんな時、同レベルのcase文を追いたい場合、通常なら「case」まで移動して「*」や「#」でジャンプしたりする。
でもこれだと、検索レジスタ「"/」を汚してしまうし、ネストしたcase文には対応できない。

そこで、同じ高さのインデントに移動する術を期待し、Vimの本家で「move same indent」というフレーズで検索したら見事ヒット!
一行でしかもキーマップまで書けてしまうとは。。

このWikiには「Alt-,/.」に割り当てているが、しかしMeta(Alt)キーがうまく動作しない。
原因はここにあるようにgnome-terminalがAltの前にESCを付けてしまうのが問題らしい。


よって、以下の設定にした。
nn <C-k> k:call search ("^". matchstr (getline (line (".")+ 1), '\(\s*\)') ."\\S", 'b')<CR>^
nn <C-j> :call search ("^". matchstr (getline (line (".")), '\(\s*\)') ."\\S")<CR>^
※nnってのは:nn[TAB]で補完されるようにnnoremapの略

j/k」の上下移動にちなんで、「Ctrl-j/k」で同インデントに上下移動でき(カーソルが行頭にある必要もなし)、こっちの方がフィーリング的に合っている。
ちなみに、「Ctrl-j/k」はデフォルトでは大した機能に割り当てられておらず、またその機能には代替キーも用意されているので問題無い。


0 件のコメント:

コメントを投稿