vimのgnモーションはすごく便利、かもしれない。
実践vimをぱらぱら読んでいたら訳注のところでgnとかいうものが紹介されていたのですが、解説が無く。気になって調べてみたので、使い方をメモ。
例えば以下のような謎プログラムがあるとします。
datatimeAlpha = alpha
datatimeBeta = beta
dataFile = filename
datetimeとすべきところをdatatimeと書いてしまって悲しい気持ちです。
悲しいのできちんと直すのですが、:%s/datatime/datetime/とするのは長ったらしくて面倒くさい。
そこでとりあえず、/dataで検索して、最初の行のdatatimeの先頭までジャンプします。
ctAdatetimeとしても目的は達成出来るのですが、ちょっと長い。
てっとりばやく処理するために、gnの登場です。gnはマッチ全体を示すモーションらしいです。次のマッチを示すgnと、前のマッチを示すgNの二通りがあります。
先ほどの場所から、cgnとしてみてください。dataの範囲が消えてインサートモードに入ります。あとはdateって書くだけ。
直せたらnで次のマッチに飛んで、ドットコマンドでもう一回置換します。
更に飛ぶと今度は正しいdataなので、置換終了。みたいな感じ。
なお、gnモーションは次のマッチ全体を示すものなので、いちいちnコマンドで次に飛ぶ必要はありません。ドットコマンド連打でも全部置換できます。
とはいえ無闇に連打してると関係無いもの(この例では最後の行)を巻き込みそうだし、マッチが確実に正しいなら:sで置換しちゃった方早いだろうし。
nとドットを交互に繰り返す方が良いのではないかと、個人的には思います。
結構便利な気がする。置換コマンド呼ぶほど箇所が大くない時とかに活躍する、かも?