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

如何从tty中查找tmux窗口/窗格?,tmux,Tmux,假设我有多个tmux会话和窗口/窗格。过了一段时间,我可能在不同的窗口/窗格中启动了多个vimps将显示所有vim进程的ttys。如何查找给定tty的tmux窗口/窗格 虽然您可以尝试使用{pane\u pid}使用{pane\u pid}并对结果进行灰显,但您的问题可能会更容易通过 tmux choose-tree 它提供了tmux正在运行的会话/窗口/窗格的列表、这些窗格中运行的内容,以及突出显示时窗格本身的快照。要直接跳转到某个已知的tty,可以使用tmux列表窗格与-F格式和tmux交

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

虽然您可以尝试使用
{pane\u pid}
使用
{pane\u pid}
并对结果进行灰显,但您的问题可能会更容易通过

tmux choose-tree

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

要直接跳转到某个已知的tty,可以使用
tmux列表窗格
-F格式
tmux交换机客户端
的组合。在这种格式中,您可以使用
{pane\u tty}
abd
{pane\u id}
来塑造输出,然后只使用grep(例如pts/2)

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

tmux switch-client -t $(tmux list-panes -aF "#{pane_tty}:#{pane_id}" | sort | fzf | grep -oE "[^:]*$") 
当您使用窗格标题时,它可以更加方便用户。正如您特别要求使用vim一样,下面是如何为您在vim中编辑的文件动态设置窗格标题(将其放入vimrc中)

然后触发对它的模糊搜索

tmux switch-client -t $(tmux list-panes -aF "#{pane_tty}: #{pane_title} :#{pane_id}" | grep vim | sort | fzf | grep -oE "[^:]*$") 
这将给你更多的自由关于什么样的列表,你必须处理比选择树,因为你有选择过滤和(模糊)搜索列表

find /tmp/tmux-$UID -type s -print0 |
  xargs -0i tmux -S '{}' list-panes -a -F '#{session_name} #{window_index} #{pane_tty} #{window_name}' 2>/dev/null |
  grep -w "$(ps -p "$1" -o tty= || echo pts/NO_SUCH_TTY)"
我希望
列表窗格
采用过滤器,这样会更容易

我将此脚本称为
p2mux


我的答案有点复杂(
find | xargs tmux
),因为我嵌套了tmux会话,
default
是顶级会话,所有嵌套会话都附加在
default
会话中同名的窗口中。这样我可以很快找到我所有的工作空间。我还有一个脚本,我称之为
ntmux
,我给它一个目录,它将创建一个以该目录的基本名称命名的新会话,并在
default
会话中创建一个同名的新窗口,然后它将运行
tmux-S。。。在该窗口中附加会话
——这使得启动新的嵌套会话变得非常简单。

感谢您的回复!这两个命令非常有用(感谢分享),尽管它们并不能完全解决我描述的问题。我遇到了一个类似的问题,认为本指南很有帮助
tmux switch-client -t $(tmux list-panes -aF "#{pane_tty}: #{pane_title} :#{pane_id}" | grep vim | sort | fzf | grep -oE "[^:]*$") 
find /tmp/tmux-$UID -type s -print0 |
  xargs -0i tmux -S '{}' list-panes -a -F '#{session_name} #{window_index} #{pane_tty} #{window_name}' 2>/dev/null |
  grep -w "$(ps -p "$1" -o tty= || echo pts/NO_SUCH_TTY)"