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

时间:2016-06-09 16:00:38

标签: tmux fzf

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

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

当我在shell中运行它时,它运行良好,给我一个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"

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

所以,如果我打开3个窗口,在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"正确地输出了不同的窗口(但是我不想要的是一堆布局信息),而run-shell "tmux list-windows -F '#I:#W'"给了我同一个窗口重复的原始问题对于每个窗口条目。

我认为问题是tmux正在为当前窗口扩展#I:#W,而不是将其传递给list-windows命令,因此我需要将它们转义。关于如何做到的任何想法?

更新2:

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

2 个答案:

答案 0 :(得分:3)

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

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

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

答案 1 :(得分:0)

如果将来有人想要使用此脚本,请使用正确的版本:

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