クライアント/サーバーモードの実用的な用途は何ですか?


23

Vimがクライアントサーバーモード(:h clientserver)を許可していることを知っています:コマンドを取得して実行するサーバーに変更したり、コマンドをサーバーに送信するクライアントとして使用したりすることができます。

私はそれがどのように機能するかを知っていますが、この機能の実用的な使用を想像することはできません:どの場合にそれが有用であり、この機能を使用してどのようなワークフローを作成できますか?

だから私の質問は簡単です:Vimのクライアントサーバーモードの使用は何ですか?

(私の質問は、それをどのように機能させるか、どのように機能させるかではなく、なぜそれを使用するのかということです。)



2
私はこれをあまりにも広範に閉じたいと思っています。
ムル

3
締めくくりが広すぎると思います。SEはこの質問に最も適したプラットフォームではないかもしれませんが、この機能について何かが欠けているように感じているので、他の人がこれらの回答から利益を得られると思いました。
statox

回答:


21
  • Vim 7.4の最近のチャネル/ジョブ機能の前は、クライアントサーバー機能が、Pythonに依存せずに、適切なバックグラウンドコンパイルを行う唯一の方法でした。バックグラウンドジョブとしてコンパイルを開始し、終了すると、クライアントサーバーチャネルのおかげで終了したことをvimに通知します。

  • また、pyclewnのような「プラグイン」によって間接的に使用され、デバッガーをvimに統合します。実際には、pyclewnは(+ clientserverの上に構築される)+ netbeans機能を使用します。他の注目すべきプロジェクトでは、このnetbeansインターフェースを使用してvimとIDEを統合しています:h netbeans-intro

  • また、コマンドラインからVimでテストを実行するために、vimrunnerなどの一部のテストプラグインによって使用されます。travisでプラグインをテストするために使用します。

  • + clientserverのおかげで、xdviインターフェイスでのクリックをLaTeXソースコードに同期させたことも覚えています。


1
そのため、ユーザーが直接使用するのではなく、サードパーティのアプリケーションで使用すると便利です。とても興味深い回答をありがとう。
statox

4
@statoxはい。私が見る主なユースケースは、外部ツールとの簡単な統合です。コマンドラインを介してvimコマンドと関数をフィードできるため、シンプルです。
リュック

1
Eclimはこの別の例です。
-goldilocks

13

私のこれの使用は、Luc Hermitteの使用よりも少し単純です(そしておそらくありふれたものです)。

これをコンパイルしてgvimのインスタンスを起動すると(そして、FedoraやDebianなどの主要なLinuxディストリビューションなどで長い間使用されています)、サーバーモードで起動します。「gvim」を強調したのは、これから説明vimしようとしていることは、GUIターミナルの単一のインスタンスには当てはまらないようだからです(ただし、パラメータを適切に使用すれば可能になると思います)。

とにかく、そのgvimインスタンスのどこからでもgvim --remote [file path]--servername指定なしで)任意のファイルを開くことができます。私はvimでファイルシステムを直接ナビゲートしないので、これが好きです。代わりに、オーソドックスなファイルブラウザー(真夜中の司令官)を使用します -むしろ、mc軽量でさまざまなカラースキームスキンを使用してそれらの区別を簡素化できるため、それらの山をさまざまな場所に開きます(したがって、2つまたは3つを別々に開く傾向があります)少なくとも1つのGUI端末のタブ)。ただし、ファイルブラウザーにも同じ原則が適用されると思います。これにより、何らかの形式のカスタマイズ可能なホットキーを関連付けることができますgvim --remote %f。ではmcF2 + eと強調表示/選択したファイルがgvimをインスタンスに送信されるように、私は、ユーザーのメニューでそれを持っています。

これは少し良くなります:たとえば、同じデスクトップまたは別のデスクトップのモニター#2で2つ目の gvimインスタンスを開き、その中の異なるカラースキームを使用し、今回は明示的--servername fooにを送信すると、送信できます代わりにそのインスタンスにファイル:

 gvim --servername foo --remote [file path]

あなたがしていることの範囲などに応じて、役に立つかもしれないし、そうでないかもしれない何か。


これは私が想定していなかったユースケースですが、実際にVimからファイルをナビゲートしたくない場合は、回避策として有効です。
statox

経由して、同時に私は、ファイルブラウザで、最低限、やっている他の事は、テキストの同じ場所(内のファイルをちらっと見ているので、まあ、私はそれを「回避」考えていないless瞬間と一つです、終了するためのキー)そして、おそらくこのようなリモートモードも持っているvim以外のアプリケーションに送信します(表示するためにヘッダーの積み重ねられたタブを残すために時々使用する他の「エディター」を含む多くのものが今やっています) 。別の言い方をすれば、vimを使用してfsをナビゲートすることは、mcandおよび--remote;)を使用しないための
回避策のように思え

1
うん、それ自体はワークフローであり、回避策ではありません。私の言い回しは理想的ではありませんでしたが、あなたの答えのアイデアは理解しました;-)
statox

1
Visual Studioを使用する場合、ほとんどの編集はVimで行います。この機能を使用して、キーストロークで現在のファイルを(同じ場所にカーソルを置いて)開きます。これを設定する方法については、「gvimとVisual Studio Vimのヒントの統合」ページの「外部ツールとしてVim」セクションを参照してください。
リッチ

5

組み込み開発。組み込み開発では多くの場合、IPソケットがありますが、ローカルハードドライブのスペースは限られているか、不揮発性メモリはありません。組み込みボードでサーバーを起動し、開発用コンピューターでクライアントを起動して、すべての構成とタグをローカルにセットアップできます。


1

Vim、LaTeX、BibTeXを使用して修士論文を書きました。BibTeX参照を管理するために、JabRefというプログラムを使用しました。JabRefにはVimサーバーインスタンスに接続できる小さな機能があり、その後、JabRefからBibTeX参照をVimで編集しているLaTeXドキュメントに「プッシュ」できます。


1

私のワークフローは、ゴールディロックスが答えで言ったことに似ています。オプション:terminalと組み合わせてvim8の機能を使用し--remoteます。vimで2つのウィンドウレイアウトを維持します。左側のウィンドウと右側のターミナルにコードを作成します。右のウィンドウ(ターミナル)を使用して、コンパイルを実行し、ファイルシステムをナビゲートし、現在のvimインスタンスで(ターミナルから)ファイルを開きます。このフローにより、非常に少ないマウス操作で操作できます。

私はgvimとicewmを使用します(任意のウィンドウマネージャーが行う必要があります)

gvimインスタンスを開始します

gvim somefile

gvimの内部で、垂直分割のオープンターミナル

:botright vertical terminal
(or) short form
:bo vert term 
"botright" splits the window to right

ターミナルウィンドウで分割

gvim --remote-send '<C-w><C-w>' --remote anotherfile

"--remote-send" will send Ctrl-W Ctrl-W to remote gvim instance(in our case, current instance) 
to put the cursor in the left window. Otherwise, the terminal split would be replaced by
'anotherfile' buffer.
"--remote" will open 'anotherfile' in left window.

.zshrc / .bashrcでこれらの長いコマンドのエイリアスを作成し、好みに合わせて短縮できます。

このワークフローでは、gvimインスタンスから移動することはほとんどなく、マウスを使用することもめったにありません。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.