*remote.txt* For Vim バージョン 8.1. Last change: 2019 May 05 VIMリファレンスマニュアル by Bram Moolenaar
Vim クライアントサーバー通信
1. 共通機能 | |clientserver| |
2. X11 特有の項目 | |x11-clientserver| |
3. Win32 特有の項目 | |w32-clientserver| |
4. MacVim 特有の項目 | |macvim-clientserver| |
オプション |+clientserver| でコンパイルした時には、Vim はコマンドサーバーとして動作することができる。それによりクライアントからメッセージを受け取りそれを實行することができる。同時に、Vim はクライアントの機能も持ち合はせ Vim サーバーへメッセージを送ることもできる。
以下のコマンドライン引數が利用できる:
ファイルをリモートの Vim で開く。Vim サーバーが無い時には、ローカルで實行される。オプションで +{cmd} に 1 つだけ Ex コマンドを指定できる。コマンドは "|" でつなげて複數指定できる。 コマンドラインの殘りの部分はファイルのリストとして扱はれる。だからファイルではない引數はこれよりも前に書かなければならない。
この方法で標準入力を開くことはできない |--|。
次のやうにしなければリモートの Vim が問題を起こすかもしれない。
vim --remote-send "<C-\><C-N>:n filename<CR>"
上と同樣、しかしサーバーが存在しなくてもエラーを報告しない。指定したファイルがすでにローカルで編輯中であつても同樣。
--remote と同樣、しかしリモート Vim でファイルが完了 (解放) されるまで待つ。
--remote-wait と同樣、しかしサーバーが存在しなくてもエラーを報告しない。
--remote と同樣、しかし各ファイルを新しいタブページで開く。
--remote-silent と同樣、しかし各ファイルを新しいタブページで開く。
--remote-wait と同樣、しかし各ファイルを新しいタブページで開く。
--remote-wait-silent と同樣、しかし各ファイルを新しいタブページで開く。
サーバー名 {name} になる。--remote コマンドのどれか 1 つと倂用すると、デフォルトのサーバーではなく {name} で指定されるサーバーに接續する (下を參照)。名前は大文字が使はれるだらう。
サーバーに {keys} を送信して終了する。{keys} にマップは適用されない。特殊キー名が使用できる。例: "<CR>" は CR 文字になる。
サーバーに {expr} を實行評價させ、その結果を標準出力に印刷する。
サーバー名のリストを表示する。
既に起動してゐる gvim サーバーで "file.txt" を編輯する:
gvim --remote file.txt
既に起動してゐるFOOBARといふ名のサーバーで "file.txt" を編輯する:
gvim --servername FOOBAR --remote file.txt
既に起動してゐるFILESといふ名のサーバーがあれば、FILES で "file.txt" を編輯するが、無ければ自分が FILES になる:
gvim --servername FILES --remote-silent file.txt
--remote の後の全ての引數がファイル名として解釋されるので動作しない:
gvim --remote --servername FOOBAR file.txt
リモートサーバーで "+foo" といふ名のファイルを編輯する ("./" により先頭の "+" の特別な意味が無效化されてゐることに注目):
vim --remote ./+foo
"BLA" といふ名のリモートサーバーで編輯中の全てのファイルを保存して終了する:
vim --servername BLA --remote-send '<C-\><C-N>:wqa<CR>'
デフォルトでは Vim は自分が起動された時の名前 (gvim, egvim ...) のサーバーにならふとする。これは引數 --servername で變更できる。指定した名前が利用できない場合には、利用できる名前になるやうに後置名が付加される。例へば、1 つの X-Server で 2 つ目の gvim を起動したときには "gvim1" といふやうになる。その時のサーバー名へは組み込み變數 |v:servername| によりアクセスできる。サーバー名の大文字小文字は區別されないので、"gvim" と "GVIM" は同じとみなされる。
Vim が引數 --remote や --remote-wait または --remote-send で起動された時には、上記のやうにその名前で起動されたサーバーを探さうと試みる。正確に一致するサーバーがなかつた時には、數字の後置名を付けて見つかつた最初のサーバーを使用する。引數 --servername に數字の後置を付けた名前を指定した場合には、それは正確に一致するものだけを對象とする。
サーバーが見つからなく、--remote か --remote-wait が使はれた時には、Vim は殘りのコマンドラインに從ひ起動し、そのファイルの編輯セッションを自分自身で取り持つ。この方法なら gvim はコマンドを送信する時に、既に別の gvim が起動してゐるかどうかを知る必要は無い。
引數 --serverlist は Vim に登錄 (實行) されてゐる全てのコマンドサーバーを、標準出力 (stdout) に印刷して終了する。
Win32 Note:
Vim サーバーをアクティブアプリケーション (トップウィンドウ) にすることは、MS-Windows がそれを許してゐないので必ずしも成功するわけではない。クライアントは引數 --remote や --remote-wait を使用しサーバー名が "g" で始まる時には、サーバーをアクティブアプリケーションにすることを試みる。
引數 --argument は殘りのコマンドラインから |:drop| コマンドを構成することを引き起こし、それを上記の方法で送信する。
引數 --remote-wait は同じ事をして、加へて全てのファイルの編輯の完了を待つやうに設定される。これは BufUnload イベントを使用し、だからファイルがアンロードされるとすぐに、Vim はファイルの編輯が完了したと判斷する。
引數 --remote と --remote-wait は殘りのコマンドライン全てを自分のものとして扱ふことに注意。言ひ換へれば殘り全ての引數はファイル名とみなされる。そこにオプションを置くことはできない!
Vim script にはコマンドサーバーを操作するために幾つか函數がある。詳細な解說は |eval.txt| を參照するか、函數名の上で CTRL-] を使つて完全な解說を參照すること。
槪要 | 說明 |
---|---|
remote_startserver(name) | サーバーを開始する |
remote_expr(server, string, idvar) | 式を送信する |
remote_send(server, string, idvar) | キーシーケンスを送信する |
serverlist() | 利用可能なサーバーのリストを得る |
remote_peek(serverid, retvar) | 結果文字列の有無確認する |
remote_read(serverid) | 結果文字列を取得する |
server2client(serverid, string) | 結果文字列を送信する |
remote_foreground(server) | サーバーを前面に移動する |
|CTRL-\_CTRL-N| の說明も參照。キーシーケンスの先頭に使用すると便利。
server2client() で使用するサーバー ID {serverid} は、expand("<client>")
で取得できる。
クライアントとサーバー閒の通信はXサーバーにより行はれる。Vim サーバーのディスプレイを指定する必要がある。X サーバーの通常の保護機能が使はれてゐるは、通信が成り立つためにはその X サーバーでウィンドウを作成できなければならない。異なるマシン閒での通信も可能である。
デフォルトでは、GUI Vim は X サーバーに名前を登錄して送信された文字列を實行できるやうに備へる。Vim はクライアントとしても振舞ひ、同じ X11 ディスプレイで動作する別の Vim インスタンスに文字列を送ることができる。
X11 の GUI Vim (gvim) が起動すると、ルートウィンドウの ’VimRegistry’ プロパティに送信サーバー名を登錄しようと試みる。
X11 ディスプレイにアクセスできる非 GUI の Vim (|xterm-clipboard| が有效になつてゐる) も、サーバー名が引數 --servername で明示的に與へらるか、Vim が |+autoservername| 機能付きでビルドされてゐる場合は、コマンドサーバーとして振舞ふことができる。
引數 --servername に空のサーバー名を與へればコマンドサーバー機能を無效にできる。
異なるアプリケーションから Vim サーバーへコマンドを送るには、使はれてゐるプロトコルの幾つかのヒントを含むソースコード src/if_xcmdsrv.c を參照のこと。
全ての Win32 版 Vim はコンソールもサーバーとして動作できる。OLE を組み込んでコンパイルする必要は無い。どの MS-Windows でも動作する、Windows メッセージが使用されてゐる。しかしネットワークを通じてやり取りすることはできない。
MS-Windows メッセージを使つてゐるから、どのやうなアプリケーションでも Vim サーバーと通信することができる。加へて OLE の機能を使ふこともできる |ole-interface|。
gvimを使つてゐる時には、--remote-wait は以下のやうにしないと正しく動作しない:
start /w gvim --remote-wait file.txt
MacVim はプロセス閒通信のために分散されたオブジェクトを使ふ。サーバーは新しい接續に名付けられたポートをリッスンし、クライアントはこのポートにメッセージを送るために接續する。サーバーのリスニングはフロントエンド (MacVim) が現在動作してゐるサーバーのすべてのリストを保持し續けることによつて可能になる。それゆゑ、サーバーは直接にお互ひを知らない; MacVim だけがどのサーバーが動作してゐるのかを知つてゐる。
クライアントは MMVimClientProtocol で實裝された任意のオブジェクト {譯注: AnyObject?} です (MacVim.h を參照)。もしもあなたが自身のアプリケーションにこのプロトコルを實裝したいなら、MMBackend を見ること。現在の實裝は NSConnection はプロセス閒通信のために Mach ポートを使用することを想定してゐる。これは、ローカルマシン上 (およびネットワークを超えない) で Vim のクライアント/サーバー機能のみを使用することができることを意味する。
Note:
クライアントモードは常に動作してゐるが、サーバーモードは GUI が起動された時にのみ動作することに注意。