我编写了以下内容,允许我使用 fzf 切换 tmux 窗口:
tmux list-windows -F "#I:#W" | fzf-tmux | cut -d ":" -f 1 | xargs tmux select-window -t
当我在 shell 中运行它时,它运行良好,给了我一个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 运行并在 shell 中运行时会得到不同的选项。
更新:
似乎run-shell "tmux list-windows"
正确地输出了不同的窗口(但有很多我不想要的布局信息),而run-shell "tmux list-windows -F '#I:#W'"
给了我相同窗口重复每个窗口条目的原始问题。
我认为问题在于 tmux 正在#I:#W
为当前 window扩展,而不是将其传递给list-windows
命令,所以我需要转义它们。关于如何做到这一点的任何想法?
更新 2:
答案是双重散列变量(##I:##W
而不是#I:#W
)。