web-dev-qa-db-fra.com

Avec Bash + iTerm2, comment nommer les onglets?

Dans iTerm2 (version 1.0.0.20120203), j’ouvre en général plusieurs onglets, chacun d’eux ayant des volets divisés. Il s’agit d’un thème de travail particulier, par exemple le contrôle des révisions, le codage, la gestion des fichiers, le travail au terminal mysql. Je dois généralement basculer entre 5 onglets ou plus dans mon flux de travail. Il est parfois difficile de se rappeler ou de dire lequel est lequel en regardant le contenu de l'écran. J'aimerais nommer les onglets d'une manière ou d'une autre, afin que je puisse rapidement dire lequel est lequel en regardant rapidement. Est-ce possible?

170
qazwsx

Puisque vous utilisez iterm2 sur un mac, une autre option est que vous pouvez simplement appuyer sur CmdI, tapez quelque chose et appuyez sur ESC.

La solution de terminal est un peu plus rapide que cela, mais je voulais juste vous le faire savoir.

206
mawaldne

J'ai trouvé la fonction suivante, placée dans mon ~/.bashrc, utile:

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

Ensuite, je peux l'appeler à partir de mon invite bash comme suit:

> title I want a pony!

Et mon onglet s'intitule en conséquence.

116
Jason Sundram

lancez cette commande pour définir le titre de votre onglet ou de votre fenêtre:

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

j'ai ajouté ce qui suit à mon ~/.bash_profile pour toujours lister le répertoire actuel par rapport à mon répertoire personnel:

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

utile lorsque vous avez 100 terminaux minimisés dans votre station d'accueil

pointe du chapeau au monde mac

44
schpet

J'ai utilisé des solutions similaires aux solutions ci-dessus pendant un bon bout de temps, mais j'ai utilisé suffisamment d'onglets pour que je veuille aussi les coder par couleur pour faciliter la référence visuelle. J'ai donc créé tabset , un utilitaire permettant de définir le titre, le badge et la couleur de l'onglet en fonction du type de travail effectué dans chaque onglet.

 example

Cela nécessite node , mais c'est maintenant une plate-forme couramment installée. À installer:

npm install -g iterm2-tab-set
16
Jonathan Eunice

Ajoutez cette fonction à votre fichier ~/.bash_profile et cela devrait fonctionner.

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

J'aime celui la:

#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

Cela vous permettra de basculer le nom d'un onglet entre un nom personnalisé et un défaut de votre CWD.

title -> le titre de votre onglet sera ~/YOUR_CWD/

title hey there -> le titre de votre onglet sera hey there

7
taylorstine

J'aime vraiment la réponse de taylorstine , mais cela rompt l'intégration de de iTerm2 qui repose sur la variable Prompt_COMMAND. Vous pouvez modifier le code de Taylor pour corriger cela en ajoutant le __bp_precmd_invoke_cmd dans le Prompt_COMMAND chaque fois que vous le bricolez:

# 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
5
Michael

J'aime Michael répondre.

Mais que se passe-t-il si .iterm2_Shell_integration.bash n'existe pas?

Voici ma prise:

# 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
3
user1318024
Preferences -> Profiles -> Terminal
  uncheck Terminal may set Tab/Window title

Le commentaire de Max Cantor a fonctionné pour moi.

2
B Seven

Si vous utilisez des profils (ce qui est très pratique): Préférences -> Apparence -> Titres de fenêtre et d'onglet: cochez la case "Afficher le nom du profil":

 image

Voilà comment ça se passe:

 thumbnail linked to main image

2
aianitro

Je pense que Changement automatique de profil et Les badges sont exactement conçus pour répondre à vos besoins:

Changement automatique de profil iTerm2 peut utiliser les informations dont il dispose sur votre chemin actuel, le nom de l'hôte et le nom d'utilisateur pour modifier les profils. Par exemple, la couleur d'arrière-plan de votre fenêtre ou le codage des caractères du terminal peuvent changer lors de la connexion à différents hôtes.

Badges Vous pouvez mettre un badge en haut à droite de votre terminal affichant des informations sur la session en cours. Il peut afficher votre nom d'utilisateur, votre nom d'hôte ou même des données personnalisées comme la branche git actuelle.

alors le résultat peut ressembler à ceci:

 enter image description here

1
lengxuehx

Je voudrais prolonger un peu la réponse de B Seven pour plus de clarté.

Étant donné que la plupart d’entre nous aimeraient savoir comment on peut définir le titre d’un onglet même s’ils ne se trouvent pas dans un shell local, au lieu d’un shell distant (par exemple sur ssh).

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

Étape 2. Pour chaque onglet, double click on the tab -> Session Title

Maintenant, quoi que vous définissiez dans le titre de la session, il resterait tel quel.

0
Krishna Gupta