Quantcast
Channel: Vimタグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 5608

:cdoと:cfdo - Quickfixの各項目に対してコマンドを実行する便利コマンド

$
0
0

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を使っておけば間違いはないかと思います。

参考リンク


Viewing all articles
Browse latest Browse all 5608

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>