Wie kann man mit Bash + iTerm2 Tabs benennen?

176

In iTerm2 (Build 1.0.0.20120203) öffne ich normalerweise mehrere Registerkarten, von denen jede über geteilte Fenster verfügt und sich mit einem bestimmten Arbeitsthema befasst, z. Normalerweise muss ich in meinem Arbeitsablauf zwischen 5 oder mehr Registerkarten wechseln. Es ist manchmal schwierig, sich zu merken oder zu sagen, welches der Bildschirminhalt ist. Ich möchte die Registerkarten irgendwie benennen, damit ich mit einem kurzen Blick erkennen kann, welche Registerkarte welche ist. Ist das möglich?

qazwsx
quelle
1
mögliches Duplikat von Change iTerm2-Fenster- und Tabulatortiteln in zsh
Daniel Beck
Nicht ganz doppelt. Wie füge ich die aktuell ausgeführte App als Teil des Tab-Titels hinzu? Dh auf welcher Registerkarte läuft Emacs, MySQL usw.?
qazwsx
1
Dh alle meine Tabs haben den gleichen Host und Benutzer. Wenn Sie diese verwenden, werden meine Tabs nicht unterschieden.
qazwsx
Sie möchten den aktuellen Jobnamen in den iTerm-Einstellungen anzeigen? Beachten Sie, dass es sich bei dem verknüpften Thema nicht um einen Benutzernamen oder einen Host handelt.
Daniel Beck
Richtig, ich möchte einige Hinweise darauf geben, welches Programm auf den einzelnen Registerkarten ausgeführt wird oder wurde. Die im anderen Beitrag angegebene Lösung funktioniert auch nicht für Bash + iTerm2.
qazwsx

Antworten:

212

Da Sie iterm2 auf einem Mac verwenden, können Sie auch einfach drücken CmdI, etwas eingeben und drücken ESC.

Die Terminal-Lösung ist etwas schneller, wollte Sie aber nur informieren.

mawaldne
quelle
11
Dies funktioniert eine Sekunde lang, bis ich auf der von mir umbenannten Registerkarte eine Rückmeldung ausstelle.
Stewie
15
@Stewie Deaktivieren Sie unter Einstellungen -> Profile -> Terminal die Option "Terminal darf Fenstertitel melden".
Max Cantor
3
Es ist nicht markiert. Der Titel wird weiterhin umbenannt.
Stewie
6
@SteveBennett es ist nicht das "Thema" (eigentlich ist der Begriff "Profil") selbst; Der CMD + I-Befehl lautet "Aktuelle Sitzung bearbeiten ..." (im Menü "Ansicht"), sodass nur die Instanz des Profils auf dieser Registerkarte geändert wird. Wenn Sie Escape drücken, wird das Fenster geschlossen, da in diesem Fenster keine Schaltfläche zum Speichern vorhanden ist.
MidnightLightning
4
Was ist, wenn mehrere Fenster geöffnet sind? Müssen Sie jeden umbenennen, um die Registerkarte selbst vollständig zu benennen?
Theicfire
119

Ich habe die folgende Funktion gefunden, die in meine eingefügt wurde ~/.bashrc, um hilfreich zu sein:

function title {
    echo -ne "\033]0;"$*"\007"
}

Dann kann ich es von meiner Bash-Eingabeaufforderung wie folgt aufrufen:

> title I want a pony!

Und mein Tab wird entsprechend betitelt.

Jason Sundram
quelle
1
Ich habe es versucht, aber es funktioniert immer noch nicht. Ich habe diese Definition in bash_aliasesund habe es in .profile( if [ -f ${HOME}/.bash_aliases ]; then . ${HOME}/.bash_aliases fi) geladen, aber dann title dogTab-Titel nicht in "Hund"
verwandelt
2
+1 - Ich habe meine zu / etc / profile hinzugefügt, nur weil sich dort meine Aliase befinden ... vergessen Sie nicht, die Datei zu quellen, nachdem Sie fertig sind. Hinweis: Dies funktioniert auch im Terminal.
blak3r
3
Sehr hilfreich. Ich wollte ein Pony. und ich habe eins bekommen!
SoEzPz
1
Ich habe meine in .bash_profile eingefügt, neu gestartet und es hat wie ein Zauber funktioniert.
C Johnson
1
Diejenigen, die denken, es funktioniert nicht, weil Ihre Eingabeaufforderung es sofort wieder ändert. Versuchen Sie title dog && sleep 5und Sie werden sehen, dass es funktioniert. Beachten Sie die Antwort von @schpet, um dies zu adressieren
Mikhail
45

Führen Sie diesen Befehl aus, um den Titel Ihrer Registerkarte oder Ihres Fensters festzulegen:

export PROMPT_COMMAND='echo -ne "\033]0;YOUR NAME HERE\007"'

Ich habe Folgendes zu meiner hinzugefügt, ~/.bash_profileum immer das aktuelle Verzeichnis in Bezug auf mein Heimatverzeichnis aufzulisten:

export PROMPT_COMMAND='echo -ne "\033]0;${PWD/#$HOME/~}\007"'

nützlich, wenn Sie 100 minimierte Terminals in Ihrem Dock haben

Hutspitze zur Mac-Welt

schpet
quelle
Das Auslassen dieses Exportbefehls hat aus irgendeinem Grund bei meiner Bash nicht ganz funktioniert (v5.0.7). Für mich hat Folgendes funktioniert:export PROMPT_COMMAND='echo -ne "\033]0;${PWD/$HOME/\~}\007"'
Mike Fogel,
18

Ich habe eine ganze Weile ähnliche Lösungen verwendet, aber ich verwende genug Registerkarten, damit ich sie auch farblich kennzeichnen kann, um sie visuell leichter nachvollziehen zu können. Also habe ich das Tabset erstellt , ein Dienstprogramm zum Festlegen des Tabtitels , des Abzeichens und der Farbe basierend auf der Art der Arbeit, die ich in jedem Tab erledige.

Beispiel

Es erfordert Knoten , aber das ist jetzt eine häufig installierte Plattform. Installieren:

npm install -g iterm2-tab-set
Jonathan Eunice
quelle
Das ist fantastisch! Besonders gut gefällt mir die automatische Einstellung der Registerkartenfarbe. Danke!
Ashutosh Jindal
1
Beeindruckend! Dies ist ein großartiges Werkzeug!
dmulvi
Ich verwende derzeit diese Methode anstelle der in der akzeptierten Antwort beschriebenen (<kbd> Cmd </ kbd> <kbd> I </ kbd>, tippe etwas ein und drücke <kbd> ESC </ kbd>)
qazwsx
but that is now a commonly installed platformHahaha.ha ... ha ......, warte, meinst du das ernst ?
Falscher Name
Ja, ernst. Entwickler und Entwickler von DevOps - heutzutage die natürliche Zielgruppe von Terminalanwendungen - haben node.js installiert. Oder kann es einfach installieren. Wer dies nicht kann, kann gerne auf bash / zsh / etc.-basierte Ansätze zurückgreifen.
Jonathan Eunice
16

Fügen Sie diese Funktion zu Ihrer ~/.bash_profileDatei hinzu und es sollte funktionieren.

function title ()
{
    TITLE=$*;
    export PROMPT_COMMAND='echo -ne "\033]0;$TITLE\007"'
}
jiangyu7408
quelle
7

Ich mag dieses:

#setup terminal tab title
function title {
    if [ "$1" ]
    then
        unset PROMPT_COMMAND
        echo -ne "\033]0;${*}\007"
    else
        export PROMPT_COMMAND='echo -ne "\033]0;${PWD/#$HOME/~}\007"'
    fi
}
title

Damit können Sie den Namen einer Registerkarte zwischen einem benutzerdefinierten Namen und einem Standardnamen Ihres CWD umschalten.

title -> Ihr Tab-Titel wird sein ~/YOUR_CWD/

title hey there -> Ihr Tab-Titel wird sein hey there

taylorstine
quelle
Beachten Sie, dass die Integration der iTerm-Shell so
Michael
5

Ich mag die Antwort von Taylor sehr , aber sie unterbricht die Shell-Integration von iTerm2, die sich auf die PROMPT_COMMANDVariable stützt . Sie können Taylors Code ändern, um dies zu korrigieren, indem Sie das __bp_precmd_invoke_cmdBack zu der PROMPT_COMMANDZeit hinzufügen, in der Sie daran basteln:

# iTerm2 shell integration
test -e "${HOME}/.iterm2_shell_integration.bash" && source "${HOME}/.iterm2_shell_integration.bash"

# iTerm2 tab titles
function title {
    if [ "$1" ]
    then
        export PROMPT_COMMAND='__bp_precmd_invoke_cmd'
        echo -ne "\033]0;${*}\007"
    else
        export PROMPT_COMMAND='echo -ne "\033]0;${PWD/#$HOME/\~}\007";__bp_precmd_invoke_cmd'
    fi
}
title
Michael
quelle
3

Ich mag Michaels Antwort.

Aber was ist, wenn .iterm2_shell_integration.bashes nicht existiert?

Hier ist meine Einstellung:

# iTerm2 shell integration
test -e "${HOME}/.iterm2_shell_integration.bash" && source "${HOME}/.iterm2_shell_integration.bash"

# iTerm2 tab titles
function title {
  if [ "$1" ] ; then
    test -e "${HOME}/.iterm2_shell_integration.bash" \
      && export PROMPT_COMMAND='iterm2_preexec_invoke_cmd' \
      || unset PROMPT_COMMAND
    echo -ne "\033]0;${*}\007"
  else
    test -e "${HOME}/.iterm2_shell_integration.bash" \
      && export PROMPT_COMMAND='echo -ne "\033]0;${PWD/#$HOME/~}\007";iterm2_preexec_invoke_cmd' \
      || export PROMPT_COMMAND='echo -ne "\033]0;${PWD/#$HOME/~}\007"'
  fi
}
title
user1318024
quelle
1
Beachten Sie, dass in v3.1, iterm2_preexec_invoke_cmdhat sich__bp_precmd_invoke_cmd
Michael
2

Wenn Sie mit Profilen arbeiten (was sehr praktisch ist): Einstellungen -> Darstellung -> Fenster- und Tabulatortitel: Kreuzen Sie 'Profilnamen anzeigen' an:

Bild

So sieht es aus:

Vorschaubild mit Hauptbild verknüpft

aianitro
quelle
2
Preferences -> Profiles -> Terminal
  uncheck Terminal may set Tab/Window title

Max Cantors Kommentar hat für mich funktioniert.

B Sieben
quelle
1

Ich denke, dass die automatische Profilumschaltung und die Badges genau auf Ihre Anforderungen zugeschnitten sind:

Automatische Profilumschaltung iTerm2 kann Informationen zu Ihrem aktuellen Pfad, Hostnamen und Benutzernamen verwenden, um Profile zu ändern. Beispielsweise können sich die Hintergrundfarbe Ihres Fensters oder die Zeichencodierung des Terminals ändern, wenn Sie eine Verbindung zu verschiedenen Hosts herstellen.

Ausweise Sie können oben rechts in Ihrem Terminal einen Ausweis mit Informationen zur aktuellen Sitzung platzieren. Es kann Ihren Benutzernamen, Hostnamen oder sogar benutzerdefinierte Daten wie den aktuellen Git-Zweig anzeigen.

Das Ergebnis könnte also so aussehen:

Bildbeschreibung hier eingeben

lengxuehx
quelle
Bitte zitieren Sie die wesentlichen Teile der Antwort aus dem / den Verweis (en), da die Antwort ungültig werden kann, wenn sich die verlinkten Seiten ändern.
DavidPostill
0

Aus Gründen der absoluten Klarheit möchte ich die Antwort von B Seven etwas erweitern.

Da die meisten von uns wissen möchten, wie man einen Titel eines Tabs setzen kann, auch wenn sie sich nicht in der lokalen Shell befinden, sondern in der entfernten Shell (zB über ssh).

Schritt 1. Preferences -> Profiles -> Terminal uncheck Terminal may set Tab/Window title

Schritt 2. Für jede Registerkarte double click on the tab -> Session Title

Was auch immer Sie im Sitzungstitel festgelegt haben, es bleibt unverändert.

Krishna Gupta
quelle
-2

Yuk, all diese Aliase und Funktionen. Einfachere Lösung (wenn Sie root sind), fügen Sie dies in ein Terminal ein:

TARGET=/usr/bin/title
sudo tee "$TARGET" <<'EOF'
#!/usr/bin/env bash
echo -ne "\033]0;$*\007"
EOF
sudo chmod 755 "$TARGET"

Oder erstellen Sie einfach irgendwo in Ihrem Pfad oder globalen Pfad einen Titel für einen Dateiaufruf und fügen Sie die beiden Zeilen zwischen EOF ein.

Orwellophile
quelle
12
"Yuk mit all diesen Aliasen." Die Antworten, an die sich niemand erinnern oder die er von Hand eingeben kann.
Dan
1
@ Dan das nicht sagen will , ist großartig, nur dass es keine Notwendigkeit , dass sich daran zu erinnern ist , da es nur ein Skript namens Erstellen von titlein /usr/bin.
Emile Bergeron
@EmileBergeron thx, obwohl es scheint, dass Sie (wir) in einer Minderheit sind. Die Antwort war nur 1 Zeile, der Rest ist für faule Leute.
Orwellophile