5

我编写了以下内容,允许我使用 fzf 切换 tmux 窗口:

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

当我在 shell 中运行它时,它运行良好,给了我一个fzf可以搜索和切换到的窗口列表。

我将它绑定到ftmux 中的键:

# 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)。

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 回答