LoginSignup
10
6

More than 5 years have passed since last update.

Ack.vim と qfreplace で気軽に複数ファイルの一括置換

Posted at

Vim での複数ファイルの一括置換については、何となく :argdo などを使うっぽいということだけ知っていた状態で、あまり使ったことはありませんでした。

しかし、複数ファイル一括置換をするような場面に出くわし、簡単にできる方法は無いかと探していたところ、Ack.vimqfreplace の組み合わせが簡単そうだったので紹介します。

利用する Vim プラグインについて

Ack.vim

自分のお気に入りの検索ツール(agripgrepなど)による検索結果を、Quickfix ウインドウに表示してくれるプラグインです。
Quickfix ウインドウの検索結果から、対象ファイルを直接開くことも可能です。

qfreplace

Quickfix ウインドウに一覧表示されたリストを一括置換できるプラグインです。
Quickfix ウインドウのリストから置換バッファを作成し、こちらを編集・保存することで、該当のファイルを一括置換することができます。

複数ファイル一括置換の流れ

以下の流れで一括置換していきます。

  1. Ack.vim で検索したい文字列で検索、Quickfix ウインドウ表示
  2. qfreplace で Quickfix ウインドウから置換バッファウインドウ作成
  3. 置換バッファ内で置換
  4. 置換バッファを保存
  5. 置換を確認

手順

例として、以下では puma-dev リポジトリ以下全ファイルの darwin という文字列を、 charles という文字列に変更する手順で書こうと思います。

環境

  • Mac OS X 10.13.6
  • Vim 8.1.202

0. 下準備

手順実施前に、お好みの Vim プラグインマネージャーなどを使って Ack.vim と qfreplace をインストールしておきます。
以下では dein.vim の例で記載します。


call dein#add('mileszs/ack.vim')
call dein#add('thinca/vim-qfreplace')

Ack.vim で ag を使いたいという方は、ag をインストールした状態で.vimrc に下記を追記します。
(特に変更はいらないという方は飛ばしていただいて構いません)

if executable('ag')
  let g:ackprg = 'ag --vimgrep'
endif

1. Ack.vim で検索したい文字列で検索、Quickfix ウインドウ表示

それでは実施していきます。まず puma-dev リポジトリをクローンし、Vim を起動します。

$ git clone https://github.com/puma/puma-dev
$ cd puma-dev
$ vim

Vim が起動したら、:Ack darwin と入力し実行します。
すると検索ヒットした結果が Quickfix ウインドウに表示されます。

1_ack.png

2. qfreplace で Quickfix ウインドウから置換バッファウインドウ作成

次に、Quickfix ウインドウが開いた状態で、:Qfreplace と入力し実行します。
すると、Quickfix ウインドウの上部にさらに qfreplace の置換バッファウインドウが開きます。

2_qf.png

内容は Ack.vim の Quickfix ウインドウに表示された検索行がそのまま表示された形になります。
置換バッファの表示ができたら、Ack.vim の Quickfix ウインドウは閉じてもOKです。

3. 置換バッファ内で置換

qfreplace の置換バッファ内で置換を実行します。この置換バッファ内ではインサートモードで手動編集もできるのですが、今回はコマンドで置換します。

:% s/darwin/charles/g と入力し実行します。
すると、置換バッファ内の darwin という文字列がすべて charles という文字列に置換されます。

3_replace.png

4. 置換バッファを保存

最後に、置換バッファ内で、:w を入力し保存を実行します。
すると、検索ヒットした行に該当するファイルに一括で保存処理が走り、変更が保存されます。

4_save.png

5. 置換を確認

最後に置換ができているかを確認してみます。

Vim を終了し、git diff してみると、確かに置換ができていることが確認できます。

5_diff.png

終わりに

僕はこれで気軽に複数ファイル一括置換ができるようになりました。また検索結果を確認しながら作業ができるのもいい感じです!

参考URL

10
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
6