カーソル下のパスをそのまま開く(gf)と分割・タブでの開き方
コード中に書かれたimport文のパスを、コピーしてExコマンドとして貼り付けて開く、という作業を繰り返していました。カーソルを乗せるだけでそのパスを開けるコマンドがあり、これを覚えるとファイル間の移動がずっと楽になります。
目次(6項目)
| キー | これだけ覚える |
|---|---|
| gf | カーソル位置のパスをそのまま開く |
| Ctrl-w f | 水平分割した新規ウィンドウで開く |
| Ctrl-w gf | 新規タブで開く |
基本の使い方
gf
「Go to File」の略で、カーソルの下または後ろにあるファイルパスをカレントウィンドウで開きます。パスがディレクトリであれば、netrwや設定しているファイラーがそこを起点に開きます。
import "./utils/format.js"
console.log(1)
export function format() {}
分割・タブで開くバリエーション
| キー | 動作 |
|---|---|
| Ctrl-w f | 水平分割した新規ウィンドウで開く |
:vertical wincmd f | 垂直分割した新規ウィンドウで開く |
| Ctrl-w gf | 新規タブで開く |
:vertical wincmd fは打鍵数が多いので、頻繁に使うなら好きなキーにマッピングしておくと便利です。
nnoremap <Leader>gf :vertical wincmd f<CR>
関連するオプション
| オプション | 役割 |
|---|---|
path | カレントディレクトリ以外に検索対象とするディレクトリ一覧 |
suffixesadd | 拡張子を省略したパスに自動で補う拡張子 |
isfname | ファイル名とみなす文字の種類 |
suffixesaddを設定しておくと、import fooのように拡張子が省略されたパスでもgfで開けるようになります。言語ごとに拡張子が異なるので、プロジェクトの言語に合わせて設定しておくと快適さが変わります。
set suffixesadd=.js,.ts,.py
ビジュアルモードでも使える
ビジュアル選択した範囲をファイルパスとして開きたい場合もgfが使えます。パスの一部だけをカーソルが指しているために誤ったファイル名として解釈されてしまうときに、範囲を選択してからgfを実行すると、その選択範囲そのものをパスとして扱ってくれます。空白を含むパスなど、通常の判定ではうまく認識されない場合の保険として覚えておくと安心です。
使いどころ
C言語の#include、Pythonのimport、HTMLのhref/src属性など、ファイルパスが登場する場面全般で活用できます。ターミナルモードで検索結果からパスを表示させ、そこにカーソルを合わせてgfで開く、という使い方もできます。ファイルを探すこと自体が目的なら:findコマンドのほうが向いています。
suffixesaddを設定しておくと拡張子省略のパスにも対応でき、実用度が上がります。
TypeScriptのimport文を目で追ってファイルを探す作業が多かったのですが、suffixesaddに.tsを追加してからgfが拡張子なしのパスでも一発で開けるようになり、コードジャンプの手間がかなり減りました。分割で開きたいときのCtrl-w fも、慣れると無意識に指が動くようになります。
まとめ
gfはパスが書かれた場所からファイルへ直接移動できる便利なコマンドです。suffixesaddなどの関連オプションを設定しておくと、より多くの場面で使えるようになります。カーソル下がディレクトリのパスだった場合は、ファイルの代わりにnetrwの一覧が開きます。設定ファイルに書かれたディレクトリを確認したいときはこちらのほうが早く、開いた先ではそのまま目的のファイルを分割やタブで開けます。ディレクトリが開いたあとは通常のnetrwなので、一覧の表示形式を変えて目的のファイルを探すこともできます。