プログラミング目的でパイプウィンドウの内容のtmuxキーバインディング

プログラミング目的でパイプウィンドウの内容のtmuxキーバインディング

私はこのキーバインディングを機能させ、現在のウィンドウの内容を私が選択したプログラムにリンクしたいと思います。

bind P command-prompt -I "vim -" \
    "capture-pane -eJ -S - -E -; \
    set-buffer -n PIPE; \
    new-window -n '|%1' 'tmux save-buffer -b PIPE - | %1'; \
    delete-buffer -b PIPE"

- しかし、常にtmuxレポートが発生しますno buffer PIPE。通常、テキストはあまりにも速く表示され上書きされるため、sleep 10コマンド名を使用して出力をパイピングしてそれを導き出します。

によって生成された自動的に名前付きバッファの名前を変更することにしました。capture-paneそうでなければ、new-window呼び出しはtmuxの現在/基本バッファをコピーモードで最後にコピーしたバッファにリセットするように見えたためです。私が知っている限り、新しいバッファの名前をPIPE

パイプの代わりにファイルにコンテンツを出力し、完璧に動作するように似ていますが、より単純なバインディングがあります。

bind H command-prompt -I "tmux_#W.txt" \
    "capture-pane -eJ -S - -E -; \
    save-buffer '%%'; \
    delete-buffer"

ここにあるコマンドを1つずつ実行すると、プログラムは他のパイプと同様にウィンドウにテキストを受け取ります。私は何が間違っていましたか?

ベストアンサー1

new-windowコマンド間に競合があるようですdelete-buffer。つまり、vimまたは実行したいプログラムにパイプされる前に、「PIPE」バッファが削除されます。

以下の醜いハッキングは、delete-buffer電話する前にしばらく寝て問題を解決しました。

bind P command-prompt -I "vim -" \
    "capture-pane -eJ -S - -E -; \
    set-buffer -n PIPE; \
    new-window -n '|%1' 'tmux save-buffer -b PIPE - | %1'; \
    run-sh 'sleep 1 && tmux delete-buffer -b PIPE'"

おすすめ記事