vim-users.jp

Hack #71: 編集操作を繰り返す

Posted at 2009/09/12
このエントリーをはてなブックマークに追加

問題

バッファ中のある単語FOOを別の単語BARに置換するとしましょう。 これには

:%s/FOO/BAR/g

というコマンドでできるのですが、これはバッファ中の全てのFOOをBARに置換します。 全てではなく一部のFOOのみを置換したい場合はどうすれば良いでしょうか。

単純な方法は、該当する単語を

ciwBAR<Esc>

のようにして置換することですが、置換したい箇所で毎回このコマンドを入力するのは 苦痛です。どうにかして簡単にできないでしょうか。

解決方法

Vimでは最後に行なわれた編集操作を繰り返すことができます。 繰り返しを行うにはNormal modeで

.

を入力します。例えば最初に挙げた

ciwBAR<Esc>

を行なった後は.を入力するだけで同じ操作を行うことができます。

応用例

.による繰り返しはcだけでなく、 Normal modeから実行できるコマンドであればほぼ全てを繰り返すことができます。

なお、最初に挙げた単語置換を行なう場合、 予め置換したい単語を/FOOなどで検索しておけば、

n.n.n.

などとすることで次々と単語置換を行うことができます。

:%s/FOO/BAR/gc

とすれば各箇所で置換を行うかどうかを対話的に指定できるのですが、 単語の出現箇所が多く置換する箇所がまばらな場合には n.n.n.の方が便利です。

また、置換したいテキストが「FOOBARのBARの部分」(/FOO\zsBAR) のように特定の単語ではない複雑なパターンの場合、 textobj-lastpat プラグインをインストールしておくと

ci/XXX<Esc>

のようにi/で検索にマッチしている箇所を選択することができ、 便利です。

参考資料

kana

もどる
blog comments powered by Disqus