在 tmux 中,是否可以列出所有窗口中的所有窗格?

在 tmux 中,是否可以列出所有窗口中的所有窗格?

假设我有两个窗口,窗口 1 包含 2 个窗格(1、2),窗口 2 包含 3 个窗格(1、2、3),我现在位于窗口 1 中的窗格 1 中,我想直接跳转到窗口 2 中的窗格 2,这样PREFIX wchoose-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

相关内容