Wie lasse ich für iTerm2 das Arbeitsverzeichnis im Fenstertitel erscheinen?

Ich bin kürzlich von der Standard-Terminal-App zu iTerm2 gewechselt und habe ein Problem mit der Benutzerfreundlichkeit.

Auf Terminal wird das Arbeitsverzeichnis, in dem Sie sich befinden, zusammen mit dem Prozess und der Pixelgröße in der Titelleiste angezeigt. Wenn Sie beispielsweise auf Fenster klicken, um zwischen verschiedenen Terminalsitzungen zu wechseln, sehen Sie: Arbeitsverzeichnis - Prozess - Pixelgröße.

Auf iTerm2 wird leider nur der Prozess in der Titelleiste angezeigt. Wenn ich also in mehreren iTerm2-Fenstern in verschiedenen Verzeichnissen arbeite, kann ich nicht leicht unterscheiden, welches das ist, wenn ich auf Fenster klicke, um eines auszuwählen. Ich weiß, dass ich einfach zwischen iTerm2-Fenstern wechseln kann, sobald ich eines ausgewählt habe, aber ich möchte sofort genau bestimmen, welches Fenster ich möchte. (Übrigens benutze ich Witch, und Command-tabbing hilft auch nicht, weil auch hier wieder nur der Prozess in der Liste auftaucht).

Irgendwelche Vorschläge? Ich habe alle Einstellungen durchgesehen und nichts gefunden. Das Erstellen von Profilen ist nicht genau das, wonach ich suche - ich möchte nur das aktuelle Arbeitsverzeichnis in den iTerm2-Fenstertiteln sehen.

Antworten (6)

Mit der \033]0;TEXT\007Escape-Sequenz.

Anwendungsbeispiel in Bash:echo -ne "\033]0;$PWD\007"

Was Sie Ihrem hinzufügen könnten, $PROMPT_COMMANDwenn Sie Bash verwenden, oder auf andere Weise an Sie anhängen, PS1damit es häufig neu bewertet wird.

Beispiel:export PROMPT_COMMAND='echo -ne "\033]0;$PWD\007"'

Das funktioniert. Nur um pedantisch zu sein, fügen Sie die oben aufgeführte export-Zeile zu Ihrer ~/.bashrc-Datei hinzu.
Das ist fantastisch. Vielen Dank; Dies hat mir geholfen zu verstehen, dass es bei der Antwort wirklich um Bash-Programmierung geht und nichts mit iTerm vs. Terminal zu tun hat. Als Follow-up für alle anderen siehe bitte faqs.org/docs/Linux-mini/Xterm-Title.html#s3 und linfo.org/echo.html . Danke noch einmal!
und um nur das letzte Segment des Pfades zu erhalten echo -ne "\033]0;${PWD##*/}\007"(mit Dank an github.com/barryclark/bashstrap für das Zeigen des Weges)
@Spencer: Es gibt keinen Grund, die Shell-Variable PROMPT_COMMAND zu exportieren, und im Allgemeinen sollte man keine Shell-Variable exportieren, es sei denn, Sie müssen die Variable mit jedem Programm teilen, das von der Shell ausgeführt wird . Standardmäßig sollten Variablen, die von der Shell verwendet werden, nicht exportiert werden; Exportieren Sie nur Variablen, die an andere Prozesse übertragen werden sollen. ~/.bashrcwird von jeder interaktiven Shell ausgeführt, sodass sie die von diesem Skript gesetzten Variablen nicht erben müssen.
Nun, beim Exportieren verwenden Sie PROMPT_COMMAND ... Und es ist im Allgemeinen besser für komplizierte Dinge
In PowerShell:Write-Host "`e]0;$PWD`a" -NoNewLine
Es funktioniert, aber sobald Sie eine SSH-Verbindung zu einer Remote-Shell herstellen, wird das Arbeitsverzeichnis nicht aktualisiert. Dafür wird noch nach einer Lösung gesucht.
Gibt es eine Möglichkeit, dass dies jedes Mal das Standardverhalten ist, wenn ich ein neues iTerm-Fenster öffne? Ich möchte nicht jedes Mal den obigen Befehl verwenden müssen.
@ChrisNielsen Sie würden Ihr .profile oder die conf-Datei Ihrer Shell bearbeiten ...

Wenn Sie zsh verwenden (was der Standard in macOS 10.15+ ist), fügen Sie dies stattdessen in Ihre ~/.zshrc ein:

if [ $ITERM_SESSION_ID ]; then
precmd() {
  echo -ne "\033]0;${PWD##*/}\007"
}
fi

\033Sie können auch as \eund \007as buchstabieren \a.

Eine möglicherweise einfachere Antwort ist die Verwendung der von iTerm 2 angebotenen String-Interpolationsfunktion . Bereitstellung:

\(currentTab.currentSession.path)

in den Einstellungen würde zu einem geänderten Fenstertitel führen. Die Option ist über zugänglichPreferences>>Profiles>>[Profile we need to modify]>>Window

die Einstellungen Einstellungen

ERGEBNISSE Fenstertitel

Wow... endlich die richtige Antwort, nach der ich gerade gesucht habe!!! Wenn Sie möchten, dass dies für TABS funktioniert, verwenden Sie\(current.Session.path)
Behebung der Antwort von @vanHoesel: für Tabs ist es\(currentSession.path)

Ich mag diese Antwort aus diesem Kern , um sie dem Tab -Titel hinzuzufügen

# put this in your .bash_profile
if [ $ITERM_SESSION_ID ]; then
  export PROMPT_COMMAND='echo -ne "\033];${PWD##*/}\007"; ':"$PROMPT_COMMAND";
fi

Sie können den Tab-Titel in iTerm2 unter macOS relativ einfach auf das aktuelle Arbeitsverzeichnis setzen, indem Sie Folgendes in Ihr ~/.zshrcProfil einfügen:

# Set iTerm Tab Title to Current Working Directory
DISABLE_AUTO_TITLE="true"

iterm_tab_title() {
  echo -ne "\e]0;${PWD##*/}\a"
}
add-zsh-hook precmd iterm_tab_title

Es verwendet eine Precmd-Hook-Funktion , die vor jeder Eingabeaufforderung ausgeführt wird, und setzt den Registerkartentitel, indem es das aktuelle Arbeitsverzeichnis ausgibt.

Zu guter Letzt spielen einige Oh My Zsh-Themen mit dem Titel des Terminalfensters herum, sodass die Einstellung DISABLE_AUTO_TITLE="true"dies behebt.

Sie haben nicht genug Karma, um einen Kommentar abzugeben, aber wenn Sie möchten, dass es ~/dirstattdessen angezeigt wird /users/username/dir, können Sie es verwenden

if [ $ITERM_SESSION_ID ]; then
precmd() {
  echo -ne "\033]0;$(dirs)\007"
}
fi

stattdessen.