如何从 tty 中找到 tmux 窗口/窗格?

jdu*_*uan 3 tmux

假设我有多个 tmux 会话和窗口/窗格。一段时间后,我可能vim在各种窗口/窗格中启动了多个。ps将显示tty所有 vim 进程的s。我将如何找到给定 tty 的 tmux 窗口/窗格?

jer*_*ile 8

虽然您可以尝试tmux list-panes使用#{pane_pid}和 greping 结果来执行某些操作,但您的问题可能会更容易解决

tmux choose-tree
Run Code Online (Sandbox Code Playgroud)

它提供了 tmux 正在运行的会话/窗口/窗格的列表、这些窗格中正在运行的内容以及突出显示时窗格本身的快照。


小智 6

你要直接跳转到一些已知的 tty,你可以使用tmux list-paneswith-F format和的组合tmux switch-client。在格式中,您可以使用#{pane_tty}abd#{pane_id}来塑造输出,然后只使用 grep(例如 pts/2)。

tmux switch-client -t $(tmux list-panes -aF "#{pane_tty}:#{pane_id}" | grep pts/2 | grep -oE "[^:]*$") 
Run Code Online (Sandbox Code Playgroud)

如果您像我一样喜欢简单的模糊选择,请使用 fzf:

tmux switch-client -t $(tmux list-panes -aF "#{pane_tty}:#{pane_id}" | sort | fzf | grep -oE "[^:]*$") 
Run Code Online (Sandbox Code Playgroud)

当您使用 pane_title 时,它​​可以更加用户友好。正如您特别要求 vim 一样,这里是如何将窗格的标题动态设置为您在 vim 中编辑的文件(将其放入您的 vimrc)。

autocmd BufReadPost,FileReadPost,BufNewFile,BufEnter,FocusGained * call system("tmux select-pane -T 'vim | " . expand("%:t") . "'")
Run Code Online (Sandbox Code Playgroud)

然后触发对它的模糊搜索

tmux switch-client -t $(tmux list-panes -aF "#{pane_tty}: #{pane_title} :#{pane_id}" | grep vim | sort | fzf | grep -oE "[^:]*$") 
Run Code Online (Sandbox Code Playgroud)

与选择树相比,这将为您提供更多关于必须处理的列表的自由,因为您可以选择在列表中过滤和(模糊)搜索。