如何找到一个tty TMUX窗口/窗格?

时间:2019-01-31 19:59:19

标签: tmux

让我们说我有多个TMUX会话和窗口/窗格。经过一段时间,我可能已经开始多vim在各个窗口/窗格。 ps将呈现tty S中所有VIM过程。我将如何去寻找TMUX窗口/窗格对于一个给定的tty?

3 个答案:

答案 0 :(得分:1)

虽然您可以尝试使用tmux list-panes#{pane_pid}进行某些操作,然后对结果进行grepping,但是

可能会更轻松地解决您的问题
tmux choose-tree

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

答案 1 :(得分:0)

您可以直接跳到某个已知的tty,可以将tmux list-panes-F formattmux 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 "[^:]*$") 

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

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

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

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

然后触发模糊搜索

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

与选择树相比,这将为您提供更多处理选择列表的自由,因为您可以选择对列表进行过滤和(模糊)搜索。

答案 2 :(得分:0)

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)"

我希望list-panes使用过滤器,这样会更容易。

我将此脚本称为p2mux

我的回答有点复杂(find | xargs tmux,因为我嵌套了tmux会话,其中default是顶级会话,所有嵌套的会话都附加在{ {1}}个会话。这样,我可以非常快速地找到我的所有工作区。我还有一个脚本,我将其命名为default,该脚本将给该目录提供一个目录,它将创建一个以该目录的基本名称命名的新会话,并在ntmux会话中创建一个名为相同名称的新窗口,并且然后它将在该窗口中运行default,这使得启动新的嵌套会话变得很简单。