我写了以下内容,允许我用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
命令,因此我需要将它们转义。关于如何做到的任何想法?
答案是对变量进行双重哈希(##I:##W
而不是#I:#W
)。
答案 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"