Réponses:
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 terminalapp
plugin: credit
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 ): credit
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!
rails
cours d'exécution, et que j'essaie d'ouvrir une nouvelle fenêtre via commande-n, je me retrouve dans mon répertoire personnel.
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, à partir de ce wiki ):
export PS1="\[\e]2;\u@\H \w\a\e[32;1m\]>\[\e[0m\] "
où \e]2;
est la séquence d'échappement pour imprimer des choses dans la barre de titre. Il semble que Terminal.app tire ses informations de là.
Plus d'information:
/etc/bashrc
vous verrez qu'il prend également en charge un nouveau code d'échappement pour informer le terminal du répertoire de travail à l'aide d'une file:
URL, qui peut gérer tous les noms de chemin valides via un codage en pourcentage (les titres de fenêtre / onglet ne peuvent contenir qu'un sous-ensemble de caractères ASCII )
\e]7;file://hostname/percent-encoded-pathname\a
chpwd () {print -Pn "\e]2; %~/ \a"}
?
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 à 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 presque un moyen de le faire: 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 semblerait que chaque instance de zsh conserve le sien. Le partage d'historique s'effectue via un fichier commun, alors peut-être que cela pourrait être fait ici aussi ...
Voici comment vous le faites en bash.
Ce script shell indiquera (en silence, littéralement, en utilisant Applescript) Terminal.app pour ouvrir un nouvel onglet, puis basculer 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
(par exemple, / usr / local / bin) et assurez-vous qu'il est exécutable:
$ chmod +x /usr/local/bin/nt
( source )
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 : cela écrasera le contenu du presse-papiers du système.
Une méthode alternative plus longue qui n'écrase pas le presse-papiers:
pwd > $TMPDIR/wd
Ouvrez votre nouvel onglet.
cd "$(cat $TMPDIR/wd)"
rm -f $TMPDIR/wd
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).
L'ajout de terminalapp à .zshrc ne fonctionnait pas 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.