fzf で tmux ウィンドウを切り替えることができるように、次のように記述しました。
tmux list-windows -F "#I:#W" | fzf-tmux | cut -d ":" -f 1 | xargs tmux select-window -t
これをシェルで実行すると、完全に機能し、fzf
検索して切り替えることができるウィンドウのリストが表示されます。
f
私はそれをtmuxのキーにバインドしました:
# fast window switching
unbind f
bind-key f run "tmux list-windows -F \"#I:#W\" | fzf-tmux | cut -d \":\" -f 1 | xargs tmux select-window -t"
しかし、実行すると、同じウィンドウが N 回表示されます (N は開いているウィンドウの数です)。
したがって、3 つのウィンドウを開いている場合、zsh でスクリプトを実行すると、次のようになります。
1. first window
2. second window
3. third window
tmuxキーバインディングが私に与える場所
1. first window
1. first window
1. first window
以前に tmux スクリプトを作成したことがないので、ここで行っているよりもウィンドウを取得するためのより良い方法があるのではないでしょうか? そうしないと、tmux から実行した場合とシェルで実行した場合に異なるオプションが得られる理由がわかりません。
アップデート:
さまざまなウィンドウを正しく出力しているように見えrun-shell "tmux list-windows"
ますが(ただし、必要のないレイアウト情報が大量に含まれています)、run-shell "tmux list-windows -F '#I:#W'"
ウィンドウエントリごとに同じウィンドウが繰り返されるという元の問題が発生します。
問題は、コマンドに渡すのではなく、現在のウィンドウ#I:#W
に対してtmux が展開されていることだと思うので、それらをエスケープする必要があります。それを行う方法についてのアイデアはありますか?list-windows
更新 2:
答えは、変数を (##I:##W
の代わりに#I:#W
) ダブル ハッシュすることです。