Posted at

アプリケーションの外部ツールからgVimを呼び出す時の設定

More than 3 years have passed since last update.

gVim を外部ツールとして利用する場合、Vimには--remote(--remote-tab--remote-tab-silent等を含む)というオプションがあります(gVimが+clientserverでビルドされている場合)。

このオプションを利用すると、既に起動しているVimのプロセスが存在していた場合、そのアプリケーションウィンドウでファイルを開くことができます。

しかし、わりと不便な欠点もあって、例えば、ファイルを開くときの行数を指定できません。

ふつう、Vimでファイル名と行数を指定する場合、

vim +42 foo/bar.txt

というように指定しますが、--remote 系のオプションをつけてしまうと、この+Nの行数指定が無効になってしまいます。

これでは、Visual Studio からXMLやJSONをVimで編集したい、なんて時に、Vimで開いた後で再度検索したり、行ジャンプしなければならず、不便です。

そこで、これらのオプションを利用することをやめ、別のアプローチをすることにします。

それは、--remote-send オプションで、キーストロークを直に送る方法です。

こうすることにより、コマンドラインに:edit +N foo.txtを外部から注入してファイルを開くことができます。

例えば、Visual Studio から開く場合、以下のような設定となります。

2015-07-13 15_38_29-External Tools.png


  • Title: g&Vim

  • Command: Path\To\gvim.exe

  • Arguments: --remote-send "<C-\><C-n>:tabedit +$(CurLine) $(ItemPath)<CR>"

  • Initial directory: $(ProjectDir)

Arguments 以外の項目はお好みで構いません。

--remote-send の冒頭で <C-\><C-n> を入力しているのは、Vimをどのモードからでもノーマルモードに遷移させるためです。(参照:CTRL-N_CTRL-N)

この例では、:tabedit を指定しているため、VisualStudioで編集中のファイルのカーソルのある行を新規タブで開きます。