Vim初心者のQuickfixによる検索・置換入門
Vimを使い始めて約1年程、経過しました。
Vimを使い始めた当初は1年も使ってればある程度のことできるようになるだろうと思っていた自分がいました。
理想のVim環境を作るのに終わりはないと1年後の現在は感じています。
ですが、1年も使っているとそれなりに自分の好みも出てくるものです。
その中でも今回はQuickfixのカスタマイズと検索・置換について便利なプラグインと共に紹介したいと思います。
Quickfixとは
元々は、Cコンパイラから出力されたエラーメッセージをファイルに保存し、Vimでそのエラーにジャンプするというアイデアから実装された機能です。
Quickfixコマンドはより一般的に、ファイル中の位置のリストを作成し、ジャンプするために使うことができます。
実際にQuickfixコマンドを使ってみましょう。
左のウィンドウがQuickfixウィンドウになります。
今回の例ではファイル内のfizz
という単語を検索してファイル中の位置のリストを作成しています。
Quickfixウィンドウ内の各行のデフォルトのフォーマットは以下のようになっています。
<filename>|<lnum> col <col>|<text>
vimgrepによる検索
では、先程のQuickfixウィンドウがどのように作成されたのかを説明します。
まず初めに、vimgrepについてです。
" 例
:vim {pattern} {file}
vimgrepは上記のように使うことができます。
通常の/
を使った検索と違いマッチした文字列の個数が表示されています。
vimgrepはファイル{file}から{pattern}を検索し、マッチ位置をエラーリストに追加します。
エラーリストは以下コマンドを実行することで確認できます。
ここで表示されているウィンドウが先程説明したQuickfixウィンドウに当たります。
:copen
vimgrepを使った検索パターンを2つ紹介します。
まずは、基本となるカレントバッファに対して検索を行います。
ファイル{file}に%を指定することで検索可能です。
:vim {pattern} %
次に、git管理下のファイルに対して検索を行います。
ファイル{file}にgit ls-files
を指定することで検索可能です。
:vim {pattern} `git ls-files`
以上により、vimgrepを使った文字列検索が可能になりました。
ただ、毎回:copen
と入力するのは少し面倒です。
私は以下のように.vimrcを設定することで、:vim
実行時に:copen
を毎回実行せずともQuickfixウィンドウが表示されるように設定しています。
" quickfix-windowのデフォルトの表示位置を左端に変更
autocmd FileType qf wincmd H
" quickfix-windowを開き、modifiableに設定し、Windowサイズを調整
function! OpenQuickfixWindow()
cw
set modifiable
vertical resize 70
endfunction
autocmd QuickfixCmdPost vimgrep call OpenQuickfixWindow()
上記の設定を追加することで以下のような表示になります。
QuickfixCmdPost
ではQuickfixコマンド(:vim
, :grep
など)が実行された後に実行するコマンドを記述することができます。
他にも、QuickfixCmdPre
を使ってQuickfixコマンド実行前に実行するコマンドを記述することもできます。
qfreplaceを使った置換
ここからは、置換です。
先程の検索にマッチした文字列を一括置換したい場合があります。
そんな時は、以下のプラグインを使ってQuickfixウィンドウに表示されたリストを一括で置換することができます。
では、実際に使ってみます。
Quickfix上で:Qfreplace
と入力します。
すると以下のようにQuickfixウィンドウの上に新しくウィンドウが作成されます。
この新しく作成されたウィンドウ上でいつものように置換を行います。
以下の例では、caseをtestに変更しています。
:%s/case/test/g
そして:w
を実行すると全てのファイルに対して変更が行われます。
まとめ
いかがだったでしょうか?
今回は、Quickfixウィンドウを少しカスタマイズしてみましたがその他にもhelpを見てみると色々カスタマイズできそうです。
皆さんも是非、Quickfixウィンドウのカスタマイズや検索・置換試してみてください。
Discussion