Antworten:
Verwenden Sie Oh-My-Zsh und fügen Sie das 'osx'-Plugin in Ihre ~ / .zshrc-Datei wie folgt ein:
plugins=(osx)
Wenn Sie die Terminal-App von OSX verwenden, müssen Sie auch das terminalapp
Plugin hinzufügen : credit
plugins=(osx terminalapp)
Wenn Sie iTerm verwenden, müssen Sie eine Konfigurationsoption festlegen ( Beachten Sie, dass Sie möglicherweise die zsh-Plugins nicht benötigen, damit dies funktioniert ): credit
Voreinstellungen> Profile> Standard> Allgemein> Arbeitsverzeichnis> Verzeichnisoption der vorherigen Sitzung wiederverwenden
Das ist alles was Sie tun müssen!
rails
ausgeführt wird und ich versuche, über Befehl-n ein neues Fenster zu öffnen, kehre ich in mein Ausgangsverzeichnis zurück.
Eine weitere Option, die jetzt in Mac OS X Lion verfügbar ist, ist die Verwendung der integrierten Funktion. Es verwendet 'Escape-Sequenzen', um das aktuelle Verzeichnis herauszufinden. Bei mir funktioniert es, wenn ich diese Befehle in meinem .zshrc verwende:
precmd () {print -Pn "\e]2; %~/ \a"}
preexec () {print -Pn "\e]2; %~/ \a"}
es ist auch möglich PS1
(für Bash, aus diesem Wiki ):
export PS1="\[\e]2;\u@\H \w\a\e[32;1m\]>\[\e[0m\] "
wo \e]2;
ist die Escape-Sequenz, um Dinge in der Titelleiste zu drucken. Es scheint, dass Terminal.app seine Informationen von dort erhält.
Mehr Informationen:
/etc/bashrc
Sie werden jedoch feststellen, dass es auch einen neuen Escape-Code unterstützt, mit dem Terminal über eine file:
URL über das Arbeitsverzeichnis informiert wird. Diese URL kann alle gültigen Pfadnamen über die Prozentcodierung verarbeiten (die Fenster- / Tabulatortitel dürfen nur eine Teilmenge von ASCII-Zeichen enthalten ).
\e]7;file://hostname/percent-encoded-pathname\a
chpwd () {print -Pn "\e]2; %~/ \a"}
?
Dies ist eine sehr einfache Version, die ich in bash verwendet habe und die auch in zsh funktioniert. Der aktuelle Ordner wird nach jedem Befehl in einer Datei gespeichert (IMO schadet nicht zu sehr) und ein neues Terminal wird im gespeicherten aktuellen Ordner geöffnet.
Fügen Sie .zshrc Folgendes hinzu
# 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 scheint eine Möglichkeit zu sein, es fast zu tun: Neuer Tab, dann gdirs, um das tiefe Verzeichnis und voila auszuwählen. Meine erste Idee war, den Verzeichnisstapel für alle Tabs freizugeben und nach dem neuen Tab cd ~ 1 zu machen, aber ich kann nicht herausfinden, wie das geht, da anscheinend jede Instanz von zsh ihre eigene behält. Das Teilen des Verlaufs erfolgt über eine gemeinsame Datei. Vielleicht kann dies auch hier durchgeführt werden.
So machst du es in bash.
Dieses Shell-Skript teilt Terminal.app mit (im wörtlichen Sinne mit Applescript), um eine neue Registerkarte zu öffnen, und wechselt dann in das aktuelle Verzeichnis:
#!/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
… Legen Sie das obige Shell-Skript in ein Verzeichnis in Ihrem $PATH
(zB / usr / local / bin) und stellen Sie sicher, dass es ausführbar ist:
$ chmod +x /usr/local/bin/nt
( Quelle )
Wenn Sie diese neue Registerkarte sofort öffnen müssen, ohne Ihre Konfigurationsdateien zu ändern oder neue Plugins zu installieren, führen Sie Folgendes aus:
pwd | pbcopy
Öffnen Sie dann manuell eine neue Registerkarte Terminal (mit ⌘T) und in der neuen Registerkarte:
cd "`pbpaste`"
Warnung : Dadurch wird der Inhalt der Systemzwischenablage überschrieben.
Eine alternative, längere Methode, die die Zwischenablage nicht überschreibt:
pwd > $TMPDIR/wd
Öffnen Sie Ihren neuen Tab.
cd "$(cat $TMPDIR/wd)"
rm -f $TMPDIR/wd
Wenn das Verzeichnis beim Öffnen einer neuen Registerkarte automatisch geändert werden soll, verwenden Sie das Verzeichnis- Plugin.
Das osx-Plugin speichert nur das letzte Verzeichnis, aber Sie müssen den Befehl ausführen tab
, um eine neue Registerkarte zu öffnen, was nicht immer möglich ist (wenn Sie beispielsweise etwas in Ihrer aktuellen Registerkarte ausführen).
Das Hinzufügen von terminalapp zu .zshrc hat bei mir nicht funktioniert, also habe ich nach dem Plugin gesucht ~/.oh-my-zsh/plugins/terminalapp
und es sagt mir:
# 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.