让我们说我有多个TMUX会话和窗口/窗格。经过一段时间,我可能已经开始多vim
在各个窗口/窗格。 ps
将呈现tty
S中所有VIM过程。我将如何去寻找TMUX窗口/窗格对于一个给定的tty?
答案 0 :(得分:1)
虽然您可以尝试使用tmux list-panes
对#{pane_pid}
进行某些操作,然后对结果进行grepping,但是
tmux choose-tree
它提供了tmux正在运行的会话/窗口/窗格的列表,这些窗格中正在运行的会话以及突出显示时窗格本身的快照。
答案 1 :(得分:0)
您可以直接跳到某个已知的tty,可以将tmux list-panes
与-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 "[^:]*$")
如果您像我一样并且喜欢简单的模糊选择,请使用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
,这使得启动新的嵌套会话变得很简单。