假设我有两个窗口,窗口 1 包含 2 个窗格(1、2),窗口 2 包含 3 个窗格(1、2、3),我现在位于窗口 1 中的窗格 1 中,我想直接跳转到窗口 2 中的窗格 2,这样PREFIX w
会choose-window
列出会话中的所有窗口,这样我就可以跳转到正确的窗口,但不会列出窗格,PREFIX q
这样display-panes
只会让我在当前窗口中选择正确的窗格,而不能跨窗口选择。
所以我想知道是否有任何命令可以让我跨窗口选择窗格。最好的解决方案是,choose-window
或者一个新命令不仅会列出所有窗口,还会像tree
在目录中一样列出每个窗口内的所有窗格。
答案1
这个问题通过提交解决aad4e4d几个月前的 github 页面上,使用choose-tree
(只需将其绑定到一个键)即可显示所有会话/窗口/选项卡中的所有窗格,当您从列表中滚动行到一个窗格时,它甚至会显示一个预览框,非常好。
只需从 github 源代码编译并安装tmux
即可使用此功能。
答案2
命令是
tmux list-panes [-a|--all]
你可以在 tmux 会话中使用以下命令访问它:
<prefix>: list-panes -a
例如,如果您需要将命令传递给所有正在vim
运行的窗格,您可以执行以下操作:
tmux list-panes -aF "#{pane_id} #{pane_current_command}" |
awk '/vim|nvim/ {print $1}' |
xargs -I {} tmux send-keys -t {} "C-[" ":so ~/.vimrc" "C-m"
此命令执行以下操作:
tmux list-panes -aF "#{pane_id} #{pane_current_command}"
列出所有会话和窗口的所有窗格,并为每个窗格打印窗格 ID 和窗格中当前运行的命令。awk '/vim|nvim/ {print $1}'
过滤输出仅包含当前命令为 或vim
的行nvim
,然后打印这些窗格的窗格 ID。xargs -I {} tmux send-keys -t {} C-[ ":so ~/.vimrc" C-m
获取窗格 ID 输出awk
,对于每个窗格 ID,它会将键<Esc>
(以确保我们处于正常模式)、:so ~/.vimrc
(重新加载 vimrc 文件的命令)和<Enter>
(执行命令)发送到该窗格。
答案3
此列表中的任何项目均返回以下格式<Session.pane_id>
:
tmux list-panes -aF "#S.#D"
可用于send-keys
:
tmux send -t '<Session.pane_id>' ls Enter