Com Bash + iTerm2, como nomear as abas?

170

No iTerm2 (Build 1.0.0.20120203), eu normalmente abro várias abas, cada uma com painéis divididos, e é sobre um tema particular de trabalho, por exemplo controle de revisão, codificação, gerenciamento de arquivos, trabalho de terminal mysql. Eu normalmente preciso alternar entre 5 ou mais guias no meu fluxo de trabalho. Às vezes é difícil lembrar ou dizer qual é qual, olhando para o conteúdo da tela. Eu gostaria de nomear as abas de alguma forma, para que eu possa dizer rapidamente qual é qual olhando rapidamente. Isso é possível?

    
por qazwsx 02.05.2012 / 21:08

13 respostas

201

Como você está usando o iterm2 em um mac, outra opção é simplesmente clicar Cmd I , digitar algo e pressionar ESC .

A solução de terminal é um pouco mais rápida do que isso, mas só queria que você soubesse.

    
por 08.08.2013 / 17:29
116

Eu encontrei a seguinte função, colocada no meu ~/.bashrc para ser útil:

function title {
    echo -ne "3]0;"$*"
> title I want a pony!
7" }

Então, posso chamá-lo do meu prompt do bash da seguinte forma:

function title {
    echo -ne "3]0;"$*"
> title I want a pony!
7" }

E minha guia recebe o título de acordo.

    
por 23.05.2013 / 19:57
44

execute este comando para definir o título da sua guia ou janela:

export PROMPT_COMMAND='echo -ne "3]0;YOUR NAME HERE
export PROMPT_COMMAND='echo -ne "3]0;${PWD/#$HOME/~}
export PROMPT_COMMAND='echo -ne "3]0;YOUR NAME HERE
export PROMPT_COMMAND='echo -ne "3]0;${PWD/#$HOME/~}%pre%7"'
7"'
7"'
7"'

Adicionei o seguinte ao meu ~/.bash_profile para listar sempre o diretório atual em relação ao meu diretório inicial:

%pre%

útil quando você tem 100 terminais minimizados em sua doca

dica do chapéu para o mundo do mac

    
por 04.03.2013 / 01:33
16

Adicione esta função ao seu arquivo ~/.bash_profile e ele deve funcionar.

function title ()
{
    TITLE=$*;
    export PROMPT_COMMAND='echo -ne "3]0;$TITLE
function title ()
{
    TITLE=$*;
    export PROMPT_COMMAND='echo -ne "3]0;$TITLE%pre%7"'
}
7"' }
    
por 24.10.2013 / 05:26
16

Eu usei soluções semelhantes às anteriores por um bom tempo, mas uso abas suficientes para que eu também as queira codificadas por cores para facilitar a referência visual. Então criei o conjunto de guias , um utilitário para definir o título, o distintivo e a cor da guia com base no tipo de trabalho que estou fazendo em cada guia.

Requero nó , mas agora é uma plataforma comumente instalada. Para instalar:

npm install -g iterm2-tab-set
    
por 15.06.2016 / 16:19
7

Eu gosto deste:

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

Ele permitirá que você alterne o nome de uma guia entre um nome personalizado e um padrão do seu CWD.

title - > o título da guia será ~/YOUR_CWD/

title hey there - > o título da guia será hey there

    
por 26.07.2015 / 17:29
5

Eu gosto muito da resposta do taylorstine , mas ela quebra o integração shell que depende da variável PROMPT_COMMAND . Você pode modificar o código de Taylor para corrigir isso adicionando o __bp_precmd_invoke_cmd de volta ao PROMPT_COMMAND sempre que mexer nele:

# 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 "3]0;${*}
# 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 "3]0;${*}%pre%7"
    else
        export PROMPT_COMMAND='echo -ne "3]0;${PWD/#$HOME/\~}%pre%7";__bp_precmd_invoke_cmd'
    fi
}
title
7" else export PROMPT_COMMAND='echo -ne "3]0;${PWD/#$HOME/\~}%pre%7";__bp_precmd_invoke_cmd' fi } title
    
por 30.03.2016 / 16:45
3

Eu gosto da resposta do Michael .

Mas e se .iterm2_shell_integration.bash não existir?

Aqui está minha opinião:

# 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 "3]0;${*}
# 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 "3]0;${*}%pre%7"
  else
    test -e "${HOME}/.iterm2_shell_integration.bash" \
      && export PROMPT_COMMAND='echo -ne "3]0;${PWD/#$HOME/~}%pre%7";iterm2_preexec_invoke_cmd' \
      || export PROMPT_COMMAND='echo -ne "3]0;${PWD/#$HOME/~}%pre%7"'
  fi
}
title
7" else test -e "${HOME}/.iterm2_shell_integration.bash" \ && export PROMPT_COMMAND='echo -ne "3]0;${PWD/#$HOME/~}%pre%7";iterm2_preexec_invoke_cmd' \ || export PROMPT_COMMAND='echo -ne "3]0;${PWD/#$HOME/~}%pre%7"' fi } title
    
por 23.05.2017 / 15:21
2

Se você estiver trabalhando com o Profiles (o que é muito conveniente): Preferências - > Aparência - > Window & Títulos do separador: assinale "Mostrar nome do perfil":

Éassimqueparece:

    
por 24.01.2017 / 21:45
2
Preferences -> Profiles -> Terminal
  uncheck Terminal may set Tab/Window title

O comentário de Max Cantor funcionou para mim.

    
por 27.02.2018 / 14:22
1

Eu acho Troca automática de perfil e Badges são projetados exatamente para o que você precisa:

Automatic Profile Switching iTerm2 can use information it knows about your current path, host name, and user name to change profiles. For example, your window's background color or the terminal's character encoding could change when connecting to different hosts.

Badges You can put a badge in the top right of your terminal showing information about the current session. It can show your username, hostname, or even custom data like the current git branch.

para que o resultado seja assim:

    
por 01.05.2017 / 11:15
0

Eu gostaria de estender um pouco a B Seven para maior clareza.

Como a maioria de nós gostaria de saber como definir um título de uma guia mesmo quando eles não estão no shell local, em vez de no shell remoto (por exemplo, em ssh).

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

Etapa 2. Para cada guia, double click on the tab -> Session Title

Agora, o que quer que você tenha definido no título da sessão, ele permanecerá como está.

    
por 17.01.2019 / 09:32
-1

Yuk, todos esses apelidos e funções. Solução mais fácil (se você for root), cole isso em um terminal:

TARGET=/usr/bin/title
sudo tee "$TARGET" <<'EOF'
#!/usr/bin/env bash
echo -ne "3]0;$*
TARGET=/usr/bin/title
sudo tee "$TARGET" <<'EOF'
#!/usr/bin/env bash
echo -ne "3]0;$*%pre%7"
EOF
sudo chmod 755 "$TARGET"
7" EOF sudo chmod 755 "$TARGET"

Ou apenas crie um título de chamada de arquivo em algum lugar em seu caminho ou caminho global e cole as duas linhas entre EOF.

    
por 29.06.2015 / 15:35