tmux:別のウィンドウで強調表示されたコードを送信して実行します。

tmux:別のウィンドウで強調表示されたコードを送信して実行します。

2つのtmuxウィンドウを持ちたいです。最初のウィンドウには複数のプログラムの1つ(通常はvimではありません)を含めることができ、2番目のウィンドウにはR、Python、またはbcの対話型セッションがあります。

両方のウィンドウに常に同じシステムが表示されるわけではありません。通常、システムAでtmuxを実行し、いずれかのウィンドウで操作を実行し、2番目のウィンドウをシステムBにsshして対話型対話型R / Python / bcを実行します。 。

私の目標は、最初のウィンドウで何かを強調表示し、それを別のウィンドウに送信して実行することです。

tmuxがウィンドウ間でコピー/貼り付けを行うことができることを知っています。私はtmuxが特定のコマンドを別のウィンドウに送信し、それを実行するためにEnterキーで終了できることを知っています。しかし、「最初のウィンドウで強調した内容」を2番目のウィンドウに送信してから、実行する入力文字で終わるようにすることはできますか?

(つまり、コード部分を強調表示して「実行」をクリックするIDEの動作をエミュレートしようとしています。特別なvimプラグインではなくtmuxを使用してこれを実行したいのですが、1つのウィンドウではvim以外のものを使用します。 )。

ベストアンサー1

私は次の方法であなたが望むことを達成できると信じています:

1) コピーモードに入ります。 (プレフィックス[)

2)いくつかのテキストを選択します(可能性が最も高い v(isual select)/y(ank))

3) 別のウィンドウに送ってtmux paste-buffer -t [left/right]

今説明した概念証明は次のとおりです。

現在のディレクトリにfoo.rbというRubyスクリプトがある場合:

# foo.rb
x = "hello there"
puts x

...そして縦に分割された2つのウィンドウ(左はbash、右はirbセッション)を実行し、cat foo.rbコピーモードに入り、ファイルの内容を抽出し、左ウィンドウtmux paste-buffer -t rightで実行すると、right次のような出力ウィンドウが表示されます。

λ irb
2.5.1 :001 > x = "hello there"
 => "hello there"
2.5.1 :002 > puts x
hello there
 => nil

ここでout / recallを入力する必要がないように、シェルスクリプトを作成したり、キーバインディングをリンクしたりできますtmux paste-buffer -t [left/right]

paste-buffer しなければならない「Enterで終了」も処理されます。 tmux のマニュアルページの項目paste-buffer:

出力時に貼り付けバッファの改行(LF)文字は、デフォルトでキャリッジリターン(CR)の区切り文字に置き換えられます。

何らかの理由でデフォルトの区切り文字が機能しない場合は、指定された区切り文字を使用することもできますpaste-buffer -s ...

おすすめ記事