Supposons que vous êtes dans le dossier/very/cool/et/profondément/imbriqué /. Et vous voulez ouvrir un nouvel onglet de terminal dans le même dossier.
Comment feriez-vous cela?
J'utilise Mac OS et Zsh.
Utilisez Oh-My-Zsh et ajoutez le plugin 'osx' dans votre ~/.zshrc comme:
plugins=(osx)
Si vous utilisez l'application Terminal OSX d'OSX, vous devez également ajouter le plug-in terminalapp
: crédit
plugins=(osx terminalapp)
Si vous utilisez iTerm, vous devez définir une option de configuration (. Notez que vous n’avez peut-être pas besoin des plugins zsh pour que cela fonctionne ): crédit
Préférences> Profils> Par défaut> Général> Répertoire de travail> Réutiliser l'option de répertoire de la session précédente
C'est tout ce que vous devez faire!
Une autre option maintenant disponible dans Mac OS X Lion utilise la fonctionnalité intégrée. Il utilise des "séquences d'échappement" pour trouver le répertoire actuel. Pour moi, cela fonctionne si j'utilise ces commandes dans mon .zshrc:
precmd () {print -Pn "\e]2; %~/ \a"}
preexec () {print -Pn "\e]2; %~/ \a"}
il est également possible d'utiliser PS1
(pour Bash, from this wiki ):
export PS1="\[\e]2;\u@\H \w\a\e[32;1m\]>\[\e[0m\] "
où \e]2;
est la séquence d'échappement permettant d'imprimer des éléments dans la barre de titre. Il semble que Terminal.app tire ses informations de là.
Plus d'information:
C'est une version très simple que j'ai utilisée dans bash et qui fonctionne également en zsh. Il enregistre le dossier actuel dans un fichier, après chaque commande (ne fait pas trop de mal à l'OMI) et ouvre un nouveau terminal dans le dossier actuel enregistré.
ajoutez ce qui suit à . zshrc
# emulate bash Prompt_COMMAND (only for zsh)
precmd() { eval "$Prompt_COMMAND" }
# open new terminal in same dir
Prompt_COMMAND='pwd > "${HOME}/.cwd"'
[[ -f "${HOME}/.cwd" ]] && cd "$(< ${HOME}/.cwd)"
gdirs semble être un moyen de le faire presque: nouvel onglet, puis gdirs pour sélectionner le répertoire deep et le tour est joué. Ma première idée était de faire en sorte que la pile de répertoires soit partagée entre tous les onglets et de faire cd ~ 1 après le nouvel onglet, mais je ne trouve pas comment le faire, car il semble que chaque instance de zsh conserve le sien. Le partage d'historique s'effectue via un fichier commun, vous pouvez donc peut-être le faire ici aussi ...
D'après le commentaire de Pieter ci-dessus, une fois les plugins plugins=(git osx)
installés, vous pouvez simplement taper tab
et un nouvel onglet s'ouvrira dans votre répertoire actuel.
Voici comment vous le faites en bash.
Ce script shell indiquera (en silence, littéralement, à l’aide de Applescript) Terminal.app pour ouvrir un nouvel onglet, puis basculera vers le répertoire actuel:
#!/bin/bash
osascript -e 'tell application "Terminal"' \
-e 'tell application "System Events" to tell process "Terminal" to keystroke "t" using command down' \
-e "do script with command \"cd `pwd`;clear\" in selected tab of the front window" \
-e 'end tell' &> /dev/null
… Placez le script Shell ci-dessus dans un répertoire de votre $PATH
(c’est-à-dire/usr/local/bin) et assurez-vous qu’il est exécutable:
$ chmod +x /usr/local/bin/nt
( source )
De nouveaux onglets s'ouvrent déjà dans le même dossier (Cmd + T). Pour les nouvelles fenêtres (Cmd + N), la solution de Pieter est la bonne:
Préférences> Profils> Par défaut> Général> Répertoire de travail> Réutiliser l'option de répertoire de la session précédente
L'ajout de terminalapp à .zshrc n'a pas fonctionné pour moi alors j'ai cherché le plugin ~/.oh-my-zsh/plugins/terminalapp
et il m'a dit:
# This file is intentionally empty.
#
# The terminalapp plugin is deprecated and may be removed in a future release.
# Its functionality has been folded in to the core lib/termsupport.zsh, which
# is loaded for all users. You can remove terminalapp from your $plugins list
# once all your systems are updated to the current version of Oh My Zsh.
Si vous voulez que le répertoire change automatiquement quand un nouvel onglet est ouvert, utilisez le plugin dirpersist .
Le plug-in osx ne sauvegarde que le dernier répertoire, mais vous devez exécuter la commande tab
pour ouvrir un nouvel onglet, ce qui n'est pas toujours possible (si, par exemple, vous utilisez quelque chose dans votre onglet actuel).
Si vous devez ouvrir ce nouvel onglet maintenant, sans changer vos fichiers de configuration ni installer de nouveaux plugins, lancez ceci:
pwd | pbcopy
Puis ouvrez un nouvel onglet Terminal manuellement (avec ⌘T), et dans le nouvel onglet:
cd "`pbpaste`"
Attention: ceci écrasera le contenu du presse-papiers du système.
Une méthode alternative plus longue qui n'écrase pas le presse-papier:
pwd > $TMPDIR/wd
Ouvrez votre nouvel onglet.
cd "$(cat $TMPDIR/wd)"
rm -f $TMPDIR/wd