プログラミングなどのためにファイルを編集していると、ファイルパスやディレクトリはよく出てきます。
作業によっては、それらのパスを開いて読んだり編集したりしたいと感じることは多々あるわけですが、コピーしてExコマンドとして貼り付けて実行…という作業が煩わしく感じるものです。
そこでこの記事では、Vim / neovim でプラグインを使わずに「カーソル下のファイル/ディレクトリパスを開く」ためのコマンドについて、ご紹介します。
[解答] gf
Vimコマンド1. カレントウインドウに開く
(ノーマルモード)
gf
このコマンドでカーソル配下にあるパスのファイルをカレントウインドウに開きます。
パスがディレクトリであった場合は、そのパスで Netrw または 設定しているファイラプラグインが開かれます。
Vimコマンド2. 水平分割した新規ウインドウに開く
(ノーマルモード) Ctrl-w f
このコマンドでカーソル配下にあるパスのファイルについて、水平分割した新規ウインドウに開きます。
こちらも同じく、パスがディレクトリであった場合は、そのパスで Netrw または 設定しているファイラプラグインが開かれます。
Vimコマンド3. 垂直分割した新規ウインドウに開く
(ノーマルモード) :vertical wincmd f :vert wincmd f (上の略記)
このコマンドでカーソル配下にあるパスのファイルについて、垂直分割した新規ウインドウに開きます。
こちらも同じく、パスがディレクトリであった場合は、そのパスで Netrw または 設定しているファイラプラグインが開かれます。
ちょっと打ちづらいので、よく利用する人は次のようにマッピングしておくと良いかもしれません。
nnoremap gb :vertical wincmd f<CR>
Vimスクリプト4. 新規タブに開く
(ノーマルモード) Ctrl-w gf
このコマンドでカーソル配下にあるパスのファイルについて、新規タブに開きます。
こちらも同じく、パスがディレクトリであった場合は、そのパスで Netrw または 設定しているファイラプラグインが開かれます。
解説
この gf は “Go to FIle” の略です。
また、次のオプションが関連するので、よく使う方は適切に設定すると良いでしょう。
オプション | 設定内容 |
---|---|
path | ファイルを探すディレクトリ名のリストを指定する。これにより、gf でカーソル下のファイルがこのオプションで指定したディレクトリ下に存在するか調べる |
suffixesadd | カーソル下のファイル(の一部)について、このオプションで指定した拡張子のファイル名が存在するか調べる |
isfname | どの文字がファイル名に使われるはずか指定する |
利用例
このコマンドには、いくつか利用パターンがあります。
プログラムのソースコード
C言語
include で指定するファイルパスを開いたりするの利用できます。
Python
モジュールを読み込む import や開くファイルパスを指定する open などで、活用できます。
HTML
aタグのhref属性やimgタグのsrc属性など、外部からファイルを読み込む属性で活用できます。
ターミナルモード
次のように検索した結果から使う使い方もあります。
fzfなどをプラグインで利用していれば、不要かも知れませんが…
このVimコマンドの補足情報
- 利用頻度
- 便利さ
- 覚え易さ
関連するVimヘルプ
Vim のヘルプでは下記のように解説されています。
[count]gf カーソルの下か後ろの名前のファイルを編集する。
覚え方: “goto file”。
オプション ‘isfname’ により、どの文字がファイル名に使
われるはずなのかを調べる。ファイル名に続く句読点の
“.,:;!” は無視される。エスケープされた複数のスペース
“\ ” は1つのスペースに減らされる。
‘path’ により、ファイルを探すディレクトリ名のリストを
調べる。カレントファイルに対して相対的なファイルも探
される。
‘suffixesadd’ により、拡張子を補ったファイル名を調べる。
ファイルが見つからないと、‘includeexpr’ によってファイ
ル名を修正し、再びファイルを探す。
[count] が指定されると、‘path’ 内で見つかった [count]
番目のファイルを編集する。
Vim がカレントファイルの破棄 abandon を拒否したとき
は、このコマンドの実行は失敗する。
このファイルを新しいウィンドウで編集したいときは
CTRL-W_CTRL-F を使うこと。
新しいファイルを編集したいならば、次のようにする。
:e <cfile>
どのような場合でもコマンド gf を機能させるには、次のよ
うにする。
:map gf :e <cfile><CR>
カーソル下のファイル名が “type://machine/path” のよう
なハイパーテキストリンクであるならば、プラグイン
netrw が必要になる。
Unixでは、文字 ‘~’ は “~user/file” のように展開される。
環境変数も展開される expand-env。
{Vimが +file_in_path 機能付きでコンパイルされたとき
のみ有効}v_gf
editing – Vim日本語ドキュメント
{Visual}[count]gf コマンド “gf” と同様だが、編集するファイルの名前にはビ
ジュアル選択されたテキストが使われる。オプション
‘isfname’ の値は無視される。先頭の空白は無視されるが、
それ以外の空白や特殊文字はファイル名に含まれる。
({Visual} については Visual-mode を参照。)
CTRL-W gf CTRL-W_gf
新しいタブページを開き、カーソル下のファイル名を開く。
“tab split” と “gf” の組み合わせに似ているが、そのファイルが存
在しない場合に新しいタブページを作成しないところが異なる。
{+file_in_path 機能なしでコンパイルされた場合は使用できない}CTRL-W gF CTRL-W_gF
windows – Vim日本語ドキュメント
新しいタブページを開き、カーソル下のファイル名を開いて、ファイ
ル名の後に書かれている行番号へジャンプする。
“tab split” と “gF” の組み合わせに似ているが、そのファイルが存
在しない場合に新しいタブページを作成しないところが異なる。
{+file_in_path 機能なしでコンパイルされた場合は使用できない}
こちらは、Vim上では下記のコマンドでヘルプを確認できます。
:help gf :help v_gf
ヘルプで検索するときは、通常は大文字小文字は識別されませんので、どちらでも構いません。
参考書籍
こちらの書籍が参考になります。
Vim/neovim関連の書籍で、もっとも評判が良くてバイブルと呼んでる人もいる一冊です。Vim/neovimのバージョンに依存しない沢山のTips形式で、その表題通りに「思考のスピードで編集」できるようになるノウハウが詰まっています。その高い評価は Amazon のレビューからも分かる通りです。Vimmer なら必ず一度は読んでおいて間違いありません。
こちらもVim関連の書籍で評価が高い書籍の一冊です。vim-jpで見かける上級Vimmer(Vimサポーターズ)の皆様による、Vimを実践で使ったノウハウからプラグイン関連の情報が詰まっています。日本の Vim界隈を知る上でも是非一読しておきたい一冊です。
Vim/neovim の設定ファイルやプラグインなど、Vim script に関するノウハウがいくつも詰まった一冊です。日本で Vim Script をここまで深く解説している唯一の書籍と言えます。Vim力を伸ばしたいと考えるなら、絶対に避けては通れない書籍でしょう。