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