Disons que j'ai plusieurs sessions tmux et fenêtres / volets. Après un certain temps, j'ai peut-être lancé plusieurs vim
dans diverses fenêtres / volets. ps
afficherait les tty
s de tous les processus vim. Comment pourrais-je trouver la fenêtre / le volet tmux pour un tty donné?
3 Réponses :
Bien que vous puissiez essayer de faire quelque chose avec tmux list-panes
utilisant #{pane_pid}
et en examinant les résultats, il est probable que votre problème puisse être résolu plus facilement avec
tmux choose-tree
Il donne une liste des sessions / fenêtres / volets que tmux exécute, ce qui est en cours d'exécution dans ces volets et un instantané du volet lui-même lorsqu'il est mis en surbrillance.
Merci pour votre réponse! Ces deux commandes sont super utiles (merci de les partager) bien qu'elles ne résolvent pas tout à fait le problème que j'ai décrit.
Pour tmux list-panes
directement à un tty connu, vous pouvez utiliser une combinaison de tmux list-panes
au -F format
et de tmux switch-client
. Dans le format, vous pouvez utiliser #{pane_tty}
abd #{pane_id}
pour façonner la sortie, puis simplement grep (par exemple pts / 2).
tmux switch-client -t $(tmux list-panes -aF "#{pane_tty}: #{pane_title} :#{pane_id}" | grep vim | sort | fzf | grep -oE "[^:]*$")
Si vous êtes comme moi et que vous aimez les sélections floues faciles, lancez un fzf:
autocmd BufReadPost,FileReadPost,BufNewFile,BufEnter,FocusGained * call system("tmux select-pane -T 'vim | " . expand("%:t") . "'")
Il peut être encore plus convivial lorsque vous utilisez le pane_title. Comme vous l'avez spécifiquement demandé pour vim, voici comment définir dynamiquement le titre d'un volet sur le fichier que vous éditez dans vim (mettez-le dans votre vimrc).
tmux switch-client -t $(tmux list-panes -aF "#{pane_tty}:#{pane_id}" | sort | fzf | grep -oE "[^:]*$")
puis déclencher une recherche floue pour celui-ci
tmux switch-client -t $(tmux list-panes -aF "#{pane_tty}:#{pane_id}" | grep pts/2 | grep -oE "[^:]*$")
Cela vous donnera beaucoup plus de liberté sur la liste que vous devez traiter que sur l'arbre de choix car vous avez la possibilité de filtrer et de rechercher (flou) dans la liste.
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)" I wish list-panes took a filter, then it would be even easier.I call this script p2mux.My answer is a bit complicated (find | xargs tmux) because I nest tmux sessions, with default being the top-level and all nested sessions being attached each in a window of the same name in the default session. This way I can very quickly find all my workspaces. I also have a script I call ntmux that I give a directory to and it will create a new session named after the basename of that directory, and a new window in the default session named the same, and then it will run tmux -S ... attach-session in that window -- this makes it trivial to launch new nested sessions.
Je suis tombé sur une question similaire et j'ai pensé que ce guide était utile stackoverflow.com/questions/29439835/...