Vim使いの紳士淑女の皆様、こんにちは。
今回はとっても便利な:cdo
と:cfdo
コマンドについて紹介します。
バージョン7.4.858で追加されたこれらのコマンドですが、とっても便利なのです(2回目)。
日本語で紹介している記事があまり見当たらなかったため、この記事を書いてみることにしました。
どういう場面で使うか
皆さんはVimを使っている時、プロジェクト全体のファイルを検索し、一括置換したいと思ったことがありませんか?
「:args
でファイルを追加して、:argdo
で置換コマンド実行して~」とやってもいいのですが、:cdo
と:cfdo
コマンドを使えば簡単に実行できます。
必要な予備知識
これらのコマンドを使う前に、vimgrepとQuickfixについて知っておく必要があります。既にQiitaに素晴らしい紹介記事がありますので説明はそちらに譲ります。
vimgrepとQuickfix知らないVimmerはちょっとこっち来い
使い方
では実際の使い方です。
まず:cd
などでプロジェクトのトップディレクトリへ移動します。そのあと:vimgrep /hoge/ **/*.cpp | cw
といった具合に、vimgrepで検索し、その結果をQuickfixに表示します。
そこからが:cdo
と:cfdo
の出番です。タイトルにも書きましたが、これらのコマンドはQuickfixの項目に対してコマンドを実行するというコマンドなのです。そこで、substituteコマンドとupdateコマンドを組み合わせて:cdo %s/hoge/hige/ge | update
とやってやれば、Quickfixの全項目に対して置換を実行したあと保存してくれます。同時に保存をしたくない場合は、:set hidden
後に先ほどのコマンドを| update
なしで実行するなどがいいかと思います。
どうでしょう、とっても便利ではないでしょうか。
僕は試してないですが、ack.vimなどと一緒に使うとさらに便利になるようです。
:cdoと:cfdoの違い
最後に、:cdo
と:cfdo
の違いですが、コマンド実行後、:cdo
は次のQuickfixの項目に移るのに対し、:cfdo
ではQuickfixの次のファイルの最初の項目に移ります。置換の場合は:cdo
を使っておけば間違いはないかと思います。