15

これは可能ですか?

概念的には、ソリューションは、tmux ウィンドウのペイン内の別々の仮想ターミナルで実行される 2 つの vim インスタンスから、別々の地理的リージョンにある別々のマシン上の別々のターミナルに存在するものまで、考えられる多くの構成に適用する必要があります。つまり、vim は 2 つの別個のシェル プロセスによってホストされており、いずれにせよ、それらは既に tmux の下にあります)。

私がこれを熟考するように促したケース:

両方とも vim が開いている 2 つの tmux パネルがあり、Vim ヤンク/ペーストを使用してファイル間でコピーしたいと考えています。

ただし、Vim の同じインスタンスで両方を実行している場合にのみ機能するため、次のいずれかを行う必要があります。

  1. tmux のコピー/貼り付け機能を使用してコンテンツを取得します (これはやや面倒で面倒です)、または
  2. 端末 (PuTTY、iTerm2) のコピー/貼り付け機能を使用してコンテンツを取得します (これも同様に面倒ですが、ネットワーク遅延の影響を受けませんが、これは特定のサイズのテキスト ペイロードまでしか機能せず、その時点でこの方法でコピーします端末がファイルの現在表示されていない部分の内容を認識していないため、まったく機能しません)、または
  3. 分割バッファまたはタブのいずれかのVimインスタンスの1つでファイルを手動で再度開いてから、他のターミナルコンテキストを閉じると、Vimバッファの履歴/コンテキスト、およびおそらくシェルの履歴/コンテキストが失われます(大きなペイロードの場合は1よりもはるかに面倒ですが、小さなペイロード)。

これはちょっとした PITA であり、既に vim を実行している適切な端末に切り替えてファイルを開くという先見の明があれば、すべて回避できますが、ワークフローの運命と習慣が便利だったものと一致することはめったにありません。

問題は、独立して実行されているvimインスタンス間でバッファを結合できるようにするコマンドまたは単純に構築された(シェル)スクリプトの可能性があるかどうかです。Google に適切に回答してもらうのに苦労しています。

適切な回答がない場合 (または、Vim がそのインスタンス間でバッファーを転送する機能を持っていないと合理的な確実性で判断された場合)、上記のアプローチ 3 の適切な実装 (キーにバインド可能) は受け入れられます。

その間、vim の設定をさらにカスタマイズし、vim のインスタンスをできるだけ少なくするように強制することに戻ります。

4

1 に答える 1

13

いいえ、Vim は複数のインスタンス間でセッションを共有できません。このように設計されており、セッション共有機能は提供されていません。レジスタ、オンザフライ マッピング/設定、コマンド履歴などは Vim セッションに対してローカルであり、現実的には何もできません。


しかし、あなたのタイトルは少し誤解を招きやすいです: あなたは「バッファ」と書きましたが、ある Vim インスタンスから別のインスタンスにコピー/貼り付け (「バッファ」ではなく「登録」を含む) した後であるように見えます。そうですか?もしそうなら、クリップボードをサポートする適切なビルドを自分で手に入れてみませんか?

"+yインスタンス間のコピー/ヤンクは、あるインスタンスと別のインスタンスの場合と同じくらい簡単"+pです。

明らかに、Vim インスタンスが異なるシステム上にある場合、これは機能しません。このような状況で"+yは、ソース Vim にシステム提供の貼り付け先 Vim に (おそらく を使用して:set paste) 貼り付けることが最も一般的な解決策です。


Mac を使用している場合は、MacVim をインストールし、付随するmvimシェル スクリプトをパスのどこかに移動します。ターミナルでMacVim 実行可能ファイルを使用するにはmvim -v .

Linux を使用している場合は、パッケージ マネージャーから vim-gnome パッケージをインストールします。

Windows を使用している場合は、最新の「Vim without Cream」をインストールします。


しかし、私には全体が XY 問題のように見えます。Vim の組み込み:e[dit]コマンドを効率的に使用することは、潜在的な問題のように思われる問題 (多くの異なるシェルから多くのファイルを編集すること) に対するおそらく最良の解決策です。

于 2013-03-16T07:01:16.730 に答える