Est-il possible d'ouvrir un new-window
avec son répertoire de travail défini sur celui dans lequel je suis actuellement. J'utilise zsh, si cela est important.
À partir de tmux 1.9 le default-path
l'option a été supprimée, vous devez donc utiliser le -c
option avec new-window
, et split-window
(par exemple en reliant le c
, "
, et %
liaisons à inclure-c '#{pane_current_path}'
). Voir certaines des autres réponses à cette question pour plus de détails.
Une fonctionnalité pertinente a atterri dans le tronc SVN tmux début février 2012. En tmux versions qui incluent ce code, tmux raccourcis clavier qui invoquent new-window
créera une nouvelle fenêtre avec le même répertoire de travail actuel que les processus actifs du volet actuel (tant que default-path
l'option de session est vide; c'est par défaut). Il en va de même pour le volet créé par le split-window
commande lorsqu'elle est invoquée via une liaison.
Cela utilise un code spécifique à la plate-forme, de sorte que seuls certains systèmes d'exploitation sont pris en charge pour le moment: Darwin (OS X), FreeBSD, Linux, OpenBSD et Solaris.
Cela devrait être disponible dans la prochaine version de tmux (1.7?).
Avec tmux 1.4, j'utilise généralement
tmux neww
dans un Shell qui a déjà le répertoire de travail actuel souhaité.
Si, cependant, je prévois avoir besoin de créer plusieurs fenêtres avec le même répertoire de travail actuel (ou si je veux pouvoir les démarrer avec la liaison de touches <prefix> c
habituelle), alors je mets le default-path
option de session via
tmux set-option default-path "$PWD"
dans un Shell qui a déjà le répertoire de travail actuel souhaité (bien que vous puissiez évidemment le faire à partir de n'importe quel répertoire et simplement spécifier la valeur à la place).
Si default-path
est défini sur une valeur non vide, sa valeur sera utilisée au lieu d '"hériter" le répertoire de travail actuel des appels en ligne de commande de tmux neww
.
La tmux FAQ a une entrée intitulée "Comment puis-je ouvrir une nouvelle fenêtre dans le même répertoire que la fenêtre actuelle?" qui décrit une autre approche; c'est un peu alambiqué cependant.
La page de manuel Tmux actuelle (1.9a) répertorie une option -c start-directory
paramètre pour certaines commandes, dont new-window
et split-window
. Il contient également la variable de format pane_current_path
, qui fait référence à Current path if available
.
En les combinant, nous pouvons ouvrir une nouvelle fenêtre avec le répertoire de travail actuel en utilisantnew-window -c "#{pane_current_path}"
La citation est nécessaire dans le cas où le chemin actuel contient des espaces.
Si vous souhaitez diviser le volet actuel verticalement, utilisezsplit-window -c "#{pane_current_path}"
ou, pour une division horizontalesplit-window -h -c "#{pane_current_path}"
Pour que les raccourcis clavier ouvrent de nouvelles divisions et fenêtres avec le répertoire de travail actuel par défaut, ajoutez ce qui suit à votre .tmux.conf
. Le "
avec des guillemets qui l'entourent est de dire à Tmux qu'il ne doit pas démarrer une chaîne mais plutôt " clé.
bind '"' split-window -c "#{pane_current_path}"
bind % split-window -h -c "#{pane_current_path}"
bind c new-window -c "#{pane_current_path}"
Oui, utilisez new-window -c "#{pane_current_path}"
. Vous pouvez ajouter ce qui suit à votre ~/.tmux.conf
pour le rendre persistant (en supposant les raccourcis clavier par défaut):
bind c new-window -c "#{pane_current_path}"
bind '"' split-window -c "#{pane_current_path}"
bind % split-window -h -c "#{pane_current_path}"
Le default-path
le paramètre de chemin était supprimé du code en amont et l'auteur tmux recommandé dans ce message de validation en utilisant -c "#{pane_current_path}"
ou -c "$PWD
dans le new-window
et split-window
commandes.
J'ai également répondu dans cette question en double .
Avec les versions récentes de tmux (v1.8, mais peut-être aussi dans la v1.7):
tmux new-window -c "$PWD"
Les autres réponses ne fonctionnent pas pour moi lorsque j'essaie de les mettre en tant que liaisons (en particulier tmux split-window -c
). Mais j'ai inventé ma propre solution que j'utilise depuis plus d'un an et qui fonctionne à la fois pour la nouvelle fenêtre et les scissions:
~/.bashrc
:
PS1="$PS1"'$([ -n "$TMUX" ] && tmux setenv TMUXPWD_$(tmux display -p "#D" | tr -d %) "$PWD")'
~/.tmux.conf
:
unbind-key c
bind-key c run-Shell 'tmux new-window "cd \"$(tmux show-environment $(echo "TMUXPWD_#D" | tr -d %) | sed -e "s/^.*=//")\"; exec $Shell"'
bind-key C new-window
bind-key - run-Shell 'tmux split-window -v "cd \"$(tmux show-environment $(echo "TMUXPWD_#D" | tr -d %) | sed -e "s/^.*=//")\"; exec $Shell"'
bind-key | run-Shell 'tmux split-window -h "cd \"$(tmux show-environment $(echo "TMUXPWD_#D" | tr -d %) | sed -e "s/^.*=//")\"; exec $Shell"
Fonctionne, au moins, avec $ (tmux -V) 1.8. Voir les lignes commentées ici pour une version fonctionnant pour les tmux plus anciens qui n'ont pas la commande show-environment.
tmux l'a fait dans la version 1.8 mais dans 1.9 cette fonctionnalité a été supprimée au profit de l'utilisation de -c
drapeau.
Cela peut être résolu mais en reliant new-window
mais si vous voulez exécuter autre chose, cela devient trop verbeux: au lieu de taper neww man tmux
vous devrez taper neww -c "#{pane_current_path}" man tmux
ce que vous ne voulez probablement pas faire.
Il y a un mod de tmux (je suis l'auteur) pour ajouter un langage de script approprié à tmux pour permettre l'utilisation d'alias, la liaison de plusieurs commandes en 'mode', des variables, des boucles, etc ... Et aussi, cela ramène ce comportement : de nouvelles fenêtres et volets sont ouverts dans le répertoire courant.
Il peut être construit à partir de sources ici: http://ershov.github.io/tmux/