Vimの端末ウィンドウからホストのVimでファイルを開く

端末機能をサポートした Vim の端末ウィンドウからホストの Vim でファイルを開く方法について。

端末ウィンドウでファイルを開くと、端末ウィンドウの中で Vim が実行されるので Vim の中で Vim が実行される形になる。この挙動は嬉しくないので、ファイルは端末ウィンドウを表示している Vim で開いて欲しい。

:terminal に関する小さい Tipsを読むと、端末ウィンドウから特定のエスケープシーケンスと共に JSON 文字列を標準出力に出力するとそれが実現できるとわかった。ジョブから Vim へ: JSON APIに詳細が書かれている。

これを簡単に実現するためにhttps://github.com/sasaplus1/drop-to-vim.shを作った。

この drop-to-vim を用いて端末ウィンドウからホストの Vim でファイルを開くには以下のように実行する。

:terminal<CR>
$ drop-to-vim file1.txt file2.txt

これで端末ウィンドウを開いた Vim でファイルが開ける。

端末ウィンドウで実行した Vifm からホストの Vim でファイルを開く

Vifmという、Vim のような操作感をもつファイラーがある。元々の目的は端末ウィンドウの中で実行した Vifm からファイルを開く時にホストの Vim でファイルを開きたいというものだった。

これも https://github.com/sasaplus1/drop-to-vim.sh に同梱の drop-from-vifm で実現できる。vifmrc へ以下のように設定を書く。

if $VIM_TERMINAL
set vicmd=drop-from-vifm
endif

Vifm では :help が実行できるが、これは vicmd で指定された Vim に引数を渡して実行するようになっている。単純に vicmddrop-to-vim を指定すると :help が使えなくなるため専用のコマンドを作った。