Vimでファイルパスを補完・挿入する方法(Ctrl-x Ctrl-f)
設定ファイルやスクリプトを書いていると、他のファイルやディレクトリのパスを手で打ち込む場面がよくあります。うろ覚えのパスをタイプミスなく挿入したいときは、プラグインなしの標準補完で十分対応できます。
| キー | これだけ覚える |
|---|---|
| Ctrl-x Ctrl-f | 入力中のパスからファイル/ディレクトリ候補を補完 |
| Ctrl-n / Ctrl-p | 補完候補を次/前へ移動 |
Ctrl-x Ctrl-f:ファイルパス補完
インサートモードでパスの一部を入力した状態で、次のキーを押します。
target: project/|
target: project/config.yml
候補が複数あるときは一覧から選び、1つしかなければそのまま補完されます。上位のディレクトリから絞り込んでいく探し方ができるので、パスをうろ覚えのまま探しながら入力するのに向いています。カレントディレクトリからの相対パスでも同様に補完できます。
:r!:OSコマンドの出力を挿入する
パスの補完だけでなく、OSコマンドの実行結果をそのままカーソル位置に挿入することもできます。
:r! {OSコマンド}
例えば、カレントディレクトリの絶対パスを挿入したい場合はこう書きます。
:r!pwd
OSコマンド側の自由度が高いため、条件を組み合わせたファイル検索の結果を直接挿入することもできます。例えば、特定のファイル名・階層の深さを指定して検索する場合はこうなります。
:r!find ~ -name "init.lua" -type f -maxdepth 2 -print 2>/dev/null
標準エラー出力を2>/dev/nullで捨てておかないと、権限エラーなどのメッセージまでバッファに挿入されてしまうので忘れずに付けておく必要があります。
補完候補の絞り込み方
Ctrl-x Ctrl-fで候補が多く出すぎて選びにくいときは、パスの続きを1〜2文字追加で入力すると候補が自動的に絞り込まれます。逆に候補を広げ直したい場合はBackspaceで入力を削ってから、もう一度Ctrl-x Ctrl-fを叩けば再表示されます。候補の移動はCtrl-n/Ctrl-pと同じ操作感で行えます。
使い分け
| やりたいこと | 使うもの |
|---|---|
| ファイル/ディレクトリのパスを1つ挿入したい | Ctrl-x Ctrl-f |
| 検索条件を組み合わせたい、パス以外の出力を挿入したい | :r! |
| ファイルの中身そのものを挿入したい | :r {ファイルパス}(!なし) |
ファイルの中身の挿入について詳しくはファイルの内容を挿入する記事を参照してください。
シェルスクリプトの中で他のスクリプトの絶対パスを書く機会が多く、Ctrl-x Ctrl-fで補完しながら書くようになってからタイプミスがほぼなくなりました。findコマンドと組み合わせたパス挿入は、深い階層に埋もれたファイルを参照するときに特に重宝しています。
まとめ
ファイルパスの挿入はCtrl-x Ctrl-fで補完しながら、コマンド出力を挿入したいときは:r!を使います。どちらもプラグイン不要で標準機能だけで完結します。