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
.
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 .
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.
afficher le Top N des composants
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.
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}")'
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.
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"
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
}
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.
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.