Con Bash + iTerm2, come nominare le schede?


176

In iTerm2 (Build 1.0.0.20120203), di solito apro diverse schede, ognuna delle quali ha riquadri divisi, e tratta un tema particolare del lavoro, ad esempio controllo di revisione, codifica, gestione dei file, lavoro terminale mysql. In genere ho bisogno di passare tra 5 o più schede nel mio flusso di lavoro. A volte è difficile ricordare o dire quale è guardando il contenuto dello schermo. Vorrei in qualche modo dare un nome alle schede, in modo da poter capire rapidamente qual è quale dando un'occhiata veloce. È possibile?



Non del tutto duplicato. Quindi, come aggiungere l'app attualmente in esecuzione come parte del titolo della scheda? Vale a dire su quale scheda è in esecuzione emacs, mysql, ecc.?
qazwsx,

1
Vale a dire tutte le mie schede hanno lo stesso host e utente. Quindi usare quelli non differenzierà le mie schede.
qazwsx,

Vuoi dire Mostra il nome del lavoro corrente dalle preferenze di iTerm? Si noti che l'argomento collegato non riguarda il nome utente o l'host.
Daniel Beck

Bene, voglio mostrare qualche indicazione di quale programma è in esecuzione o è stato eseguito in ciascuna scheda. Inoltre, la soluzione fornita nell'altro post non funziona per Bash + iTerm2.
qazwsx,

Risposte:


212

Dal momento che stai usando iterm2 su un mac, un'altra opzione è che puoi semplicemente premere CmdI, digitare qualcosa e premere ESC.

La soluzione terminale è un po 'più veloce di questa, ma volevo solo farti sapere.


11
Funziona per un secondo fino a quando non emetto un ritorno sulla scheda che ho rinominato.
Stewie,

15
@Stewie In Preferenze -> Profili -> Terminale, deseleziona "Consenti al terminale di segnalare il titolo della finestra".
Max Cantor

3
È deselezionato. Rinomina ancora il titolo.
Stewie,

6
@SteveBennett non è il "tema" (in realtà il termine è "profilo") stesso; il comando CMD + I è "Modifica sessione corrente ..." (sotto il menu Visualizza), quindi sta cambiando l'istanza di quella scheda del profilo. Colpire Fuga chiude semplicemente la finestra, il che è necessario poiché quella finestra non ha un pulsante "salva" su di essa.
MidnightLightning

4
Cosa succede se hai più riquadri aperti? Devi rinominare ognuno per dare un nome completo alla scheda stessa?
theicfire

119

Ho trovato utile la seguente funzione, inserita in my ~/.bashrc:

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

Quindi posso chiamarlo dal mio prompt di bash come segue:

> title I want a pony!

E la mia scheda viene intitolata di conseguenza.


1
Ho provato questo, ma ancora non funziona. Ho inserito questa definizione in bash_aliases, e l'ho caricata in .profile( if [ -f ${HOME}/.bash_aliases ]; then . ${HOME}/.bash_aliases fi) Ma poi title dognon ho trasformato il titolo della scheda in "cane"
qazwsx,

2
+1 - Ho aggiunto il mio al profilo / etc / solo perché è lì che sono i miei alias ... non dimenticare di cercare il file dopo aver finito. Nota: questo funziona anche nel terminale.
Blak3r,

3
Molto utile. Volevo un pony; e ne ho preso uno!
SoEzPz,

1
Ho inserito il mio in .bash_profile, riavviato e ha funzionato come un incantesimo.
C Johnson,

1
Chi pensa che non funzioni è perché il prompt dei comandi lo ripristina all'istante. Prova title dog && sleep 5e vedrai che funziona. Nota la risposta di @schpet per rispondere a questa domanda
Mikhail,

45

eseguire questo comando per impostare il titolo della scheda o della finestra:

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

ho aggiunto quanto segue al mio ~/.bash_profileper elencare sempre la directory corrente relativa alla mia home directory:

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

utile quando hai 100 terminali minimizzati nel tuo dock

punta di cappello al mondo mac


la fuga su quel comando di esportazione non ha funzionato abbastanza sulla mia bash per qualche motivo (v5.0.7), ecco cosa ha funzionato per me:export PROMPT_COMMAND='echo -ne "\033]0;${PWD/$HOME/\~}\007"'
Mike Fogel

18

Ho usato soluzioni simili a quelle sopra per un po ', ma uso abbastanza schede che le voglio anche codificate a colori per un facile riferimento visivo. Così ho montato tabset , un'utilità per impostare il titolo della scheda, il badge e il colore in base al tipo di lavoro che sto svolgendo in ciascuna scheda.

esempio

Richiede nodo , ma ora è una piattaforma comunemente installata. Installare:

npm install -g iterm2-tab-set

Questo e spettacolare! Adoro soprattutto l'impostazione automatica del colore della scheda. Grazie!
Ashutosh Jindal,

1
Wow! Questo è un grande strumento!
dmulvi,

Attualmente utilizzo questo metodo invece di quello descritto nella risposta accettata (<kbd> Cmd </kbd> <kbd> I </kbd>,
digito

but that is now a commonly installed platformHahaha.ha ... ah ...... aspetta, sei serio ?
Nome falso

Sì, serio. Gli sviluppatori e le persone DevOps - in questi giorni, il pubblico di destinazione naturale delle applicazioni terminali - hanno installato node.js. O può installarlo facilmente. Coloro che non lo fanno / non possono fare affidamento su approcci basati su bash / zsh / ecc.
Jonathan Eunice,

16

Aggiungi questa funzione al tuo ~/.bash_profilefile e dovrebbe funzionare.

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

7

Mi piace questa:

#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

Ti permetterà di alternare il nome di una scheda tra un nome personalizzato e un valore predefinito del tuo CWD.

title -> sarà il titolo della tua scheda ~/YOUR_CWD/

title hey there -> sarà il titolo della tua scheda hey there



5

Mi piace molto la risposta di taylorstine , ma rompe l'integrazione della shell di iTerm2 che si basa sulla PROMPT_COMMANDvariabile. Puoi modificare il codice di Taylor per correggerlo aggiungendo la parte __bp_precmd_invoke_cmdposteriore PROMPT_COMMANDogni volta che armeggi con esso:

# 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

3

Mi piace la risposta di Michael .

E se .iterm2_shell_integration.bashnon esistesse?

Ecco la mia opinione:

# 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

1
Si noti che nella v3.1 iterm2_preexec_invoke_cmdè diventato__bp_precmd_invoke_cmd
Michael,

2

Se lavori con i profili (il che è molto comodo): Preferenze -> Aspetto -> Titoli di finestre e schede: spunta 'Mostra nome profilo':

Immagine

Ecco come si occupa:

miniatura collegata all'immagine principale


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

Il commento di Max Cantor ha funzionato per me.


1

Penso che il cambio profilo automatico e i badge siano progettati esattamente per ciò di cui hai bisogno:

Cambio profilo automatico iTerm2 può utilizzare le informazioni che conosce sul percorso corrente, sul nome host e sul nome utente per modificare i profili. Ad esempio, il colore di sfondo della finestra o la codifica dei caratteri del terminale potrebbero cambiare quando ci si connette a host diversi.

Badge È possibile inserire un badge in alto a destra nel terminale che mostra le informazioni sulla sessione corrente. Può mostrare il tuo nome utente, nome host o persino dati personalizzati come l'attuale ramo git.

quindi il risultato potrebbe essere simile a questo:

inserisci qui la descrizione dell'immagine


Si prega di citare le parti essenziali della risposta dai collegamenti di riferimento, in quanto la risposta può diventare non valida se le pagine collegate cambiano.
DavidPostill

0

Vorrei estendere un po 'la risposta di B Seven per una chiarezza assoluta.

Dal momento che la maggior parte di noi vorrebbe sapere come si può impostare il titolo di una scheda anche quando non si trovano nella shell locale, invece che nella shell remota (ad esempio su ssh).

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

Passaggio 2. Per ogni scheda, double click on the tab -> Session Title

Ora, qualunque cosa tu abbia impostato nel titolo della sessione, rimarrebbe così com'è.


-2

Yuk, tutti quegli alias e funzioni. Soluzione più semplice (se sei root), incollala in un terminale:

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

Oppure crea un titolo di chiamata file da qualche parte nel tuo percorso o percorso globale e incolla le due linee tra EOF.


12
"Yuk con tutti quegli alias." Immette la risposta che nessuno può ricordare o digitare a mano.
Dan

1
Non @ Dan dicendo questo è grande, solo che non c'è bisogno di ricordare che dal momento che è solo la creazione di uno script chiamato titlein /usr/bin.
Emile Bergeron,

@EmileBergeron thx, anche se sembra che tu (noi) siamo in minoranza. La risposta era solo 1 riga, il resto è per le persone pigre.
Orwellophile,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.