vim-jp / vimdoc-ja / remote

remote - Vimドキュメント

メインヘルプファイルに戻る
remote.txt    For Vim バージョン 8.2.  Last change: 2019 May 05


                VIMリファレンスマニュアル    by Bram Moolenaar


Vimクライアントサーバー通信                             client-server

1. 共通機能                     clientserver
2. X11特有の項目                x11-clientserver
3. Win32特有の項目              w32-clientserver

==============================================================================
1. 共通機能                                             clientserver

オプション+clientserverでコンパイルした時には、Vimはコマンドサーバーとして動
作することができる。それによりクライアントからメッセージを受け取りそれを実行す
ることができる。同時に、Vimはクライアントの機能も持ち合わせVimサーバーへメッ
セージを送ることもできる。

以下のコマンドライン引数が利用できる:

    引数                        意味

   --remote [+{cmd}{file} ...                                 --remote
                                ファイルをリモートのVimで開く。Vimサーバーが無
                                い時には、ローカルで実行される。オプションで
                                +{cmd}に一つだけExコマンドを指定できる。コマン
                                ドは "|" でつなげて複数指定できる。コマンドラ
                                インの残りの部分はファイルのリストとして扱われ
                                る。だからファイルではない引数はこれよりも前に
                                書かなければならない。
                                この方法で標準入力を開くことはできない--
                                次のようにしなければリモートのVimが問題を起こ
                                すかもしれない。
                                 vim --remote-send "<C-\><C-N>:n filename<CR>"

   --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" を編集する:
    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>'

サーバー名                                              client-server-name

デフォルトでは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 関数
                                                        E240 E573
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は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 で明示的に与えられるか、Vim が
+autoservername 機能付きでビルドされている場合は、コマンドサーバーとして振舞
うことができる。

引数 --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 は以下のようにしないと正しく動作しない:

        start /w gvim --remote-wait file.txt

 vim:tw=78:sw=4:ts=8:noet:ft=help:norl:
関連キーワード:  remote, サーバー, usr, Vim, wait, file, 編集, servername, silent, コマンド