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 から開く場合、以下のような設定となります。
- 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で編集中のファイルのカーソルのある行を新規タブで開きます。