使用 fzf-tmux 快速 window 切换的 tmux 脚本给了我错误的选项

tmux script for fast window switching with fzf-tmux gives me the wrong options

我写了以下内容,它允许我用 fzf 切换 tmux window:

tmux list-windows -F "#I:#W" | fzf-tmux | cut -d ":" -f 1 | xargs tmux select-window -t

当我在 shell 中 运行 时,它完美地工作,给我一个 windows 的 fzf 列表,我可以搜索并切换到它。

我将它绑定到 tmux 中的 f 键:

# 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"

但是当我运行它时,它显示相同的windowN次(其中N是我打开的windows的数量)。

所以如果我有 3 个 windows 打开,运行在 zsh 中运行脚本会给我:

1. first window
2. second window
3. third window

tmux 键绑定给我的地方

1. first window
1. first window
1. first window

我以前没有写过 tmux 脚本,所以也许有比我在这里做的更好的方法来获取 windows?否则,我不明白为什么当来自 tmux 的 运行 和 shell.

中的 运行 时我得到不同的选项

更新:

似乎 run-shell "tmux list-windows" 正确地输出了不同的 windows(但是有大量我不想要的布局信息),而 run-shell "tmux list-windows -F '#I:#W'" 给了我原来的问题每个 window 条目重复相同的 window。

我认为问题在于 tmux 正在为 当前 window 扩展 #I:#W,而不是将其传递给 list-windows命令,所以我需要逃离他们。关于如何做到这一点有什么想法吗?

更新 2:

答案是对变量进行双重散列(##I:##W 而不是 #I:#W)。

如果以后有人想使用这个脚本,正确的版本是:

# 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"

感谢您分享您的解决方案!对我帮助很大:)

对于遇到此 post 并想知道如何使用此命令在 tmux 会话之间切换的人:

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