Con Bash + iTerm2, ¿cómo nombrar las pestañas?

176

En iTerm2 (Build 1.0.0.20120203), normalmente abro varias pestañas, cada una de las cuales tiene paneles divididos, y trata sobre un tema particular de trabajo, por ejemplo, control de revisión, codificación, administración de archivos, trabajo de terminal mysql. Normalmente necesito cambiar entre 5 o más pestañas en mi flujo de trabajo. A veces es difícil recordar o decir cuál es cuál al mirar el contenido de la pantalla. Me gustaría nombrar las pestañas de alguna manera, para poder decir rápidamente cuál es cuál al echar un vistazo rápidamente. es posible?

qazwsx
fuente
1
posible duplicado de la ventana Cambiar iTerm2 y títulos de pestañas en zsh
Daniel Beck
No completamente duplicado. Entonces, ¿cómo agregar la aplicación actualmente en ejecución como parte del título de la pestaña? Es decir, ¿qué pestaña ejecuta emacs, mysql, etc.?
qazwsx
1
Es decir, todas mis pestañas tienen el mismo host y usuario. Así que usarlos no diferenciará mis pestañas.
qazwsx
¿Quiere decir que desea Mostrar el nombre del trabajo actual de las preferencias de iTerm? Tenga en cuenta que el tema vinculado no se trata de nombre de usuario o host.
Daniel Beck
Bien, quiero mostrar alguna indicación de qué programa se está ejecutando o se ejecutó en cada pestaña. Además, la solución dada en la otra publicación no funciona para Bash + iTerm2.
qazwsx

Respuestas:

212

Como estás usando iterm2 en una Mac, otra opción es simplemente presionar CmdI, escribir algo y presionar ESC.

La solución del terminal es un poco más rápida que esto, pero solo quería avisarle.

mawaldne
fuente
11
Esto funciona por un segundo hasta que emito un retorno en la pestaña que he cambiado de nombre.
Stewie
15
@Stewie En Preferencias -> Perfiles -> Terminal, desmarque "Permitir que la terminal reporte el título de la ventana".
Max Cantor
3
Está desmarcado. Todavía cambia el nombre del título.
Stewie
66
@SteveBennett no es el "tema" (en realidad el término es "perfil") en sí mismo; el comando CMD + I es "Editar sesión actual ..." (en el menú Ver), por lo que solo está cambiando la instancia de esa pestaña del perfil. Golpear Escape solo cierra la ventana, lo cual es necesario ya que esa ventana no tiene un botón "guardar".
MidnightLightning
44
¿Qué pasa si tienes varios paneles abiertos? ¿Tiene que cambiar el nombre de cada uno para nombrar completamente la pestaña en sí?
theicfire
119

He encontrado que la siguiente función, colocada en mi, ~/.bashrces útil:

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

Entonces puedo llamarlo desde mi indicador bash de la siguiente manera:

> title I want a pony!

Y mi pestaña se titula en consecuencia.

Jason Sundram
fuente
1
Intenté esto, pero todavía no funciona. Puse esta definición bash_aliasesy la cargué en .profile( if [ -f ${HOME}/.bash_aliases ]; then . ${HOME}/.bash_aliases fi) Pero luego title dogno convertí el título de la pestaña en "perro"
qazwsx
2
+1: agregué el mío a / etc / profile solo porque ahí es donde están mis alias ... no olvides buscar el archivo una vez que hayas terminado. Nota: esto también funciona en la terminal.
blak3r
3
Muy útil. Yo quería un pony; y tengo uno!
SoEzPz
1
Puse el mío en .bash_profile, reinicié y funcionó de maravilla.
C Johnson
1
Aquellos que piensan que no funciona es porque su símbolo del sistema lo cambia instantáneamente. Intenta title dog && sleep 5y verás que funciona. Tenga en cuenta la respuesta de @schpet para abordar esto
Mikhail
45

ejecuta este comando para establecer el título de tu pestaña o ventana:

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

He agregado lo siguiente a mi ~/.bash_profilepara enumerar siempre el directorio actual en relación con mi directorio de inicio:

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

útil cuando tienes 100 terminales minimizadas en tu base

punta de sombrero para mac world

Schpet
fuente
el escape en ese comando de exportación no funcionó en mi bash por alguna razón (v5.0.7), esto es lo que funcionó para mí:export PROMPT_COMMAND='echo -ne "\033]0;${PWD/$HOME/\~}\007"'
Mike Fogel
18

Utilicé soluciones similares a las anteriores durante bastante tiempo, pero utilizo suficientes pestañas que también quiero que estén codificadas por colores para una fácil referencia visual. Así que preparé el juego de pestañas , una utilidad para configurar el título, la insignia y el color de la pestaña en función del tipo de trabajo que estoy haciendo en cada pestaña.

ejemplo

Requiere nodo , pero ahora es una plataforma comúnmente instalada. Instalar:

npm install -g iterm2-tab-set
Jonathan Eunice
fuente
¡Esto es asombroso! Especialmente me encanta la configuración automática del color de la pestaña. ¡Gracias!
Ashutosh Jindal
1
¡Guauu! Esta es una gran herramienta!
dmulvi
Actualmente uso este método en lugar del descrito en la respuesta aceptada (<kbd> Cmd </kbd> <kbd> I </kbd>, escriba algo y presione <kbd> ESC </kbd>)
qazwsx
but that is now a commonly installed platformJajajajajajaja ... espera, ¿en serio ?
Nombre falso
Si en serio Los desarrolladores y las personas de DevOps (actualmente, el público objetivo natural de las aplicaciones de terminal) tienen node.js instalado. O puede instalarlo fácilmente. Aquellos que no pueden / no pueden volver a los enfoques basados ​​en bash / zsh / etc.
Jonathan Eunice
16

Agregue esta función a su ~/.bash_profilearchivo y debería funcionar.

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

Me gusta este:

#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

Le permitirá alternar el nombre de una pestaña entre un nombre personalizado y un valor predeterminado de su CWD.

title -> el título de tu pestaña será ~/YOUR_CWD/

title hey there -> el título de tu pestaña será hey there

taylorstina
fuente
Tenga en cuenta que tal como está, esto bloqueará la integración de shell iTerm.
Michael
5

Realmente me gusta la respuesta de taylorstine , pero rompe la integración de shell de iTerm2 que se basa en la PROMPT_COMMANDvariable. Puede modificar el código de Taylor para corregir esto agregando la parte __bp_precmd_invoke_cmdposterior PROMPT_COMMANDcada vez que juegue con él:

# 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
Miguel
fuente
3

Me gusta la respuesta de Michael .

Pero, ¿y si .iterm2_shell_integration.bashno existe?

Aquí está mi opinión:

# 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
usuario1318024
fuente
1
Tenga en cuenta que en v3.1, se iterm2_preexec_invoke_cmdha convertido__bp_precmd_invoke_cmd
Michael
2

Si está trabajando con Perfiles (lo cual es muy conveniente): Preferencias -> Apariencia -> Títulos de ventanas y pestañas: marque 'Mostrar nombre de perfil':

imagen

Así es como se ve:

miniatura vinculada a la imagen principal

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

El comentario de Max Cantor funcionó para mí.

B Seven
fuente
1

Creo que el cambio automático de perfil y las insignias están diseñados exactamente para lo que necesita:

Cambio de perfil automático iTerm2 puede usar información que conoce sobre su ruta actual, nombre de host y nombre de usuario para cambiar los perfiles. Por ejemplo, el color de fondo de su ventana o la codificación de caracteres del terminal pueden cambiar cuando se conecta a diferentes hosts.

Insignias Puede colocar una insignia en la parte superior derecha de su terminal que muestre información sobre la sesión actual. Puede mostrar su nombre de usuario, nombre de host o incluso datos personalizados como la rama git actual.

entonces el resultado puede ser así:

ingrese la descripción de la imagen aquí

lengxuehx
fuente
Cite las partes esenciales de la respuesta de los enlaces de referencia, ya que la respuesta puede volverse inválida si las páginas enlazadas cambian.
DavidPostill
0

Me gustaría extender un poco la respuesta de B Seven para mayor claridad.

Como a la mayoría de nosotros nos gustaría saber cómo se puede establecer el título de una pestaña incluso cuando no están en el shell local, en lugar de en el shell remoto (por ejemplo, sobre ssh).

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

Paso 2. Para cada pestaña, double click on the tab -> Session Title

Ahora, sea lo que sea que haya establecido en el título de la sesión, permanecerá como está.

Krishna Gupta
fuente
-2

Yuk, todos esos alias y funciones. Solución más fácil (si es root), péguelo en un terminal:

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

O simplemente haga un título de llamada de archivo en algún lugar de su ruta, o ruta global, y pegue las dos líneas entre EOF.

Orwellophile
fuente
12
"Yuk con todos esos alias". Entra la respuesta que nadie puede recordar ni escribir a mano.
Dan
1
@ Dan no decir esto es grande, sólo que no hay necesidad de recordar que, dado que es sólo la creación de un script llamado titleen /usr/bin.
Emile Bergeron
@EmileBergeron thx, aunque parece que (nosotros) somos una minoría. La respuesta fue solo 1 línea, el resto es para gente perezosa.
Orwellophile