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とドットを交互に繰り返す方が良いのではないかと、個人的には思います。
結構便利な気がする。置換コマンド呼ぶほど箇所が大くない時とかに活躍する、かも?