Comment renommer automatiquement les fenêtres tmux dans le répertoire courant

j'aimerais que tmux renomme automatiquement la fenêtre avec le répertoire de travail courant (cwd). Comme il est par défaut, il nomme l'onglet/fenêtre comme le nom du processus courant, tel que zsh ou vim.

Quand j'ouvre une nouvelle fenêtre dans tmux, le nom est reattach-to-use-namespace et puis, il passe immédiatement à zsh .

tmux tabs

je suis sur OS X 10.10.2, j'utilise zshell, et j'ai tmux 1.9 A.

pour être clair, Je ne veux pas le chemin entier dans le nom de la fenêtre, juste le répertoire courant, donc par exemple, je veux projectName , pas /Users/username/Development/projectName .

si vous voulez voir mon actuel tmux.conf , voici .

29
demandé sur aharris88 2015-02-07 02:29:14

9 réponses

en développant sur ce que Josef a écrit, Vous pouvez mettre le nom de base du répertoire dans le statut en utilisant un fragment de shell:

# be sure to see note* below
set -g window-status-format '#I:#(pwd="#{pane_current_path}"; echo ${pwd####*/})#F'
set -g window-status-current-format '#I:#(pwd="#{pane_current_path}"; echo ${pwd####*/})#F'

# status bar updates every 15s by default**, change to 1s here 
# (this step is optional - a lower latency might have negative battery/cpu usage impacts)
set -g status-interval 1

*notez que ce qui serait ${pwd##*/} est échappé à ${pwd####*/} car # a un sens particulier dans la chaîne de format.

**voir ici pour un exemple de configuration par défaut de tmux.

18
répondu CEL 2018-05-30 07:44:45

afficher le Top N des composants

enter image description here

montrer juste le nom de base génère trop d'ambiguïté, mais les chemins sont trop encombrés, donc je me suis contenté de:

the/last/path

au lieu de:

/a/very/long/the/last/path

ou juste:

path

.tmux.conf :

set-window-option -g window-status-current-format '#[fg=white,bold]** #{window_index} #[fg=green]#{pane_current_command} #[fg=blue]#(echo "#{pane_current_path}" | rev | cut -d'/' -f-3 | rev) #[fg=white]**|'
set-window-option -g window-status-format '#[fg=white,bold]#{window_index} #[fg=green]#{pane_current_command} #[fg=blue]#(echo "#{pane_current_path}" | rev | cut -d'/' -f-3 | rev) #[fg=white]|'

extrait de: Unix supprimer une partie du chemin

si cela ne résout toujours pas l'ambiguïté, je choisis:

bind-key -r w choose-window -F '#{window_index} | #{pane_current_command} | #{host} | #{pane_current_path}'

testé sur Tmux 2.1, Ubuntu 16.04.

9

avec tmux 2.3+ , le modificateur de format b: affiche le" nom de base "(ou" queue") d'un chemin.

set-option -g status-interval 5
set-option -g automatic-rename on
set-option -g automatic-rename-format '#{b:pane_current_path}'

la section FORMATS de man tmux décrit d'autres préfixes pour modifier le résultat #{} , tels que d: et même s/foo/bar/: .


avec tmux plus ancien que 2.3 , la commande shell basename peut être utilisée à la place.

set-option -g status-interval 5
set-option -g automatic-rename on
set-option -g automatic-rename-format '#(basename "#{pane_current_path}")'
7
répondu Justin M. Keyes 2018-04-13 16:17:28

ajoutant cette config à votre~/.tmux.le fichier conf devrait fonctionner:

set-option -g window-status-current-format '#I:#{pane_current_path}#F'
set-option -g window-status-format '#I:#{pane_current_path}#F'
set-option -g status-interval 1

cela dépend cependant de votre version Tmux. Je n'ai pas réussi à faire marcher 1.9a3 (en Cygwin) - mais avec Tmux 1.8 sur Ubuntu (en Vagrant) il a fonctionné très bien.

1
répondu Josef 2015-02-07 16:22:04

faites quelque chose comme ça dans une session tmux pour le shell zsh:

setopt PROMPT_SUBST
export PS1=$'\ek$(basename $(pwd))\e\> '

si quelqu'un utilise le shell bash:

export PS1="3k$(basename $(pwd))3\> "

vous pouvez ajouter ces commandes dans le fichier d'initialisation du shell à la condition que la variable $TERM soit définie à la valeur "screen"

1
répondu JuniorCompressor 2015-02-08 14:53:56

j'utilise zsh hook pour ça

ajouter ce qui suit dans ~/.zshrc

precmd () {
  if [ -n "$TMUX" ]; then
    tmux set-window-option -q window-status-format "#[fg=cyan bg=cyan] | #[fg=white, bg=cyan] #I | ${PWD##/*/} #[fg=cyan, bg=cyan] | "
    tmux set-window-option -q window-status-current-format "#[fg=cyan, bg=cyan] | #[fg=white, bg=cyan] #I | ${PWD##/*/} #[fg=cyan, bg=cyan] | "
  fi
}
1
répondu logcat 2016-08-26 18:45:40

j'utilise ce qui suit dans ~/.tmux.conf pour y parvenir (travail sur OSX, zsh, tmux-2.3):

set -g automatic-rename-format '#{pane_current_path}'
set -g status-interval 5

vous pouvez définir status-interval à 1 pour qu'il réponde plus rapidement aux changements de répertoires.

selon le changelog ( https://raw.githubusercontent.com/tmux/tmux/master/CHANGES ) cela devrait fonctionner dans tmux 1.9 et plus.

utilisant ssh dans une machine CentOS avec tmux 2.3 le nom de la fenêtre ne change pas jusqu'à ce que j'appuie sur retour dans le nouveau panneau, Je ne sais pas pourquoi cela se produit.

1
répondu Harry Mallon 2016-10-12 15:03:45

cela ne répond pas strictement à votre question-il ne renomme pas automatiquement une session tmux existante dans le répertoire de travail courant.

plutôt, lors de la création d'une nouvelle session, il nomme cette session d'après le répertoire de travail courant.

voici ce que j'ai fait:

à

~/.alias

ajouter

alias tm='tmux new -s `basename $PWD`'

ouvrir une nouvelle fenêtre de terminal et de type:

tm

cela crée maintenant une nouvelle session tmux qui porte le nom du répertoire de travail courant.

Note: cela s'appuie sur basename qui n'existe pas sous Windows.

0
répondu FreePender 2017-01-04 18:23:25

je suis sûr que vous voulez utiliser ceci:

set -g status-left '#{pane_current_path} '

enter image description here

0
répondu jibancanyang 2018-09-12 08:36:11