*remote.txt* For
Vim バージョン 7.3. Last change: 2008 May 24
VIMリファレンスマニュアル by Bram Moolenaar
Vimクライアントサーバ通信
*client-server*
1. 共通機能
|clientserver|
2. X11特有の項目
|x11-clientserver|
3. Win32特有の項目
|w32-clientserver|
{これらのコマンドはViには存在しない}
==============================================================================
1. 共通機能
*clientserver*
オプション
|+clientserver|でコンパイルした時には、Vimはコマンドサーバとして動作
することができる。それによりクライアントからメッセージを受け取りそれを実行する
ことができる。同時に、Vimはクライアントの機能も持ち合わせVimサーバへメッセージ
を送ることもできる。
以下のコマンドライン引数が利用できる:
引数 意味
--remote [+
{cmd}]
{file} ...
*--remote*
ファイルをリモートのVimで開く。Vimサーバが無い
時には、ローカルで実行される。オプションで
+
{cmd}に一つだけExコマンドを指定できる。コマン
ドは"|"でつなげて複数指定できる。コマンドライン
の残りの部分はファイルのリストとして扱われる。
だからファイルではない引数はこれよりも前に書か
なければならない。
この方法で標準入力を開くことはできない
|--|。
次のようにしなければリモートのVimが問題を起こ
すかもしれない。
--remote-silent [+
{cmd}]
{file} ...
*--remote-silent*
上と同様、しかしサーバが存在しなくてもエラーを
報告しない。指定したファイルがすでにローカルで
編集中であっても同様。
--remote-wait [+
{cmd}]
{file} ...
*--remote-wait*
--remoteと同様、しかしリモートVimでファイルが
完了(解放)されるまで待つ。
--remote-wait-silent [+
{cmd}]
{file} ...
*--remote-wait-silent*
--remote-waitと同様、しかしサーバが存在しなく
てもエラーを報告しない。
*--remote-tab*
--remote-tab --remote と同様、しかし各ファイルを新しいタブ
ページで開く。
*--remote-tab-silent*
--remote-tab-silent --remote-silent と同様、しかし各ファイルを新し
いタブページで開く。
*--remote-tab-wait*
--remote-tab-wait --remote-wait と同様、しかし各ファイルを新しい
タブページで開く。
*--remote-tab-wait-silent*
--remote-tab-wait-silent --remote-wait-silent と同様、しかし各ファイル
を新しいタブページで開く。
*--servername*
--servername
{name} サーバ名
{name}になる。--remoteコマンドのどれか
1つと併用すると、デフォルトのサーバではなく
{name}で指定されるサーバに接続する(下を参照)。
*--remote-send*
--remote-send
{keys} サーバに
{keys}を送信して終了する。
{keys} に
マップは適用されない。特殊キー名が使用できる。
例:"
<CR>" は CR 文字になる。
*--remote-expr*
--remote-expr
{expr} サーバに
{expr}を実行評価させ、その結果を標準出
力に印刷する。
*--serverlist*
--serverlist サーバ名のリストを表示する。
使用例
既に起動しているgvimサーバで"file.txt"を編集する:
既に起動しているFOOBARという名のサーバで"file.txt"を編集する:
既に起動しているFILESという名のサーバがあれば、FILESで"file.txt"を編集するが、
無ければ自分がFILESになる:
--remoteの後の全ての引数がファイル名として解釈されるので動作しない:
リモートサーバで"+foo"という名のファイルを編集する("./"により先頭の"+"の特別な
意味が無効化されていることに注目):
"BLA"という名のリモートサーバで編集中の全てのファイルを保存して終了する:
サーバ名
デフォルトでは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スクリプト関数
*E240* *E573*
Vimスクリプトにはコマンドサーバを操作するために幾つか関数がある。詳細な解説は
|eval.txt|を参照するか、関数名の上で
CTRL-]を使って完全な解説を参照すること。
概要 説明
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はexpand("
<client>")で取得できる。
==============================================================================
2. X11特有の項目
*x11-clientserver*
*E247* *E248* *E251* *E258* *E277*
クライアントとサーバ間の通信はXサーバにより行なわれる。Vimサーバのディスプレイ
を指定する必要がある。Xサーバの通常の保護機能が使われているは、通信が成り立つ
ためにはそのXサーバでウィンドウを作成できなければならない。異なるマシン間での
通信も可能である。
デフォルトでは、GUI Vim は X サーバに名前を登録して送信された文字列を実行でき
るように備える。Vim はクライアントとしても振舞い、同じ X11 ディスプレイで動作
する別の Vim インスタンスに文字列を送ることができる。
X11のGUI Vim(gvim)が起動すると、ルートウィンドウの'VimRegistry'プロパティに
送信サーバ名を登録しようと試みる。
X11ディスプレイにアクセスできる非GUIのVim(
|xterm-clipboard|が有効になっている)
も、サーバ名が引数--servernameで明示的に与えられればコマンドサーバとして振舞う
ことができる。
引数に--servernameサーバ名を与えなければコマンドサーバ機能を無効にできる。
異なるアプリケーションからVimサーバへコマンドを送るには、使われているプロトコ
ルの幾つかのヒントを含むソースコードsrc/if_xcmdsrv.cを参照のこと。
==============================================================================
3. Win32特有の項目
*w32-clientserver*
全てのWin32版Vimはコンソールもサーバとして動作できる。OLEを組み込んでコンパイ
ルする必要は無い。どのMS-Windowsでも動作する、Windowsメッセージが使用されてい
る。しかしネットワークを通じてやり取りすることはできない。
MS-Windowsメッセージを使っているから、どのようなアプリケーションでもVimサーバ
と通信することができる。加えてOLEの機能を使うこともできる
|ole-interface|。
gvimを使っている時には、--remote-waitは以下のようにしないと正しく動作しない:
vim:tw=78:sw=4:ts=8:ft=help:norl: