5

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) ダブル ハッシュすることです。

4

2 に答える 2

6

ソリューションを共有していただきありがとうございます。とても助かりました:)

この投稿に出くわし、このコマンドを使用して tmux セッションを切り替える方法を知りたい人のために:

bind-key C-f run-shell "tmux list-sessions -F \"##S\" | fzf-tmux | xargs tmux switch -t"

于 2017-08-11T20:33:18.860 に答える
4

誰かが将来このスクリプトを使用したい場合に備えて、正しいバージョンは次のとおりです。

# fast window switching
bind -n C-f run-shell "tmux list-windows -F \"##I:##W\" | fzf-tmux | cut -d \":\" -f 1 | xargs tmux select-window -t"
于 2016-07-02T13:44:54.077 に答える