web-dev-qa-db-fra.com

Comment créer une nouvelle fenêtre sur le répertoire courant dans tmux?

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.

217
Shrikant Sharat

À 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.

150
Chris Johnsen

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 utilisant
new-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, utilisez
split-window -c "#{pane_current_path}"
ou, pour une division horizontale
split-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}"
293
Simon Kohlmeyer

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 .

43
mmoya

Avec les versions récentes de tmux (v1.8, mais peut-être aussi dans la v1.7):

tmux new-window -c "$PWD"
10
mislav

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.

3
Erik Westrup

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/

0
Yuriy Ershov