С Bash + iTerm2, как назвать вкладки?


176

В iTerm2 (сборка 1.0.0.20120203) я обычно открываю несколько вкладок, каждая из которых имеет разделенные панели, и посвящена одной конкретной теме работы, например, управлению ревизиями, кодированию, управлению файлами, работе терминала mysql. Обычно мне нужно переключаться между 5 или более вкладками в моем рабочем процессе. Иногда трудно вспомнить или сказать, что есть, глядя на содержимое экрана. Я хотел бы назвать вкладки как-нибудь, чтобы я мог быстро узнать, что есть, что, быстро взглянув. Это возможно?


1
возможное дублирование окна Change и заголовков iTerm2 в zsh
Даниэль Бек

Не совсем дубликат. Итак, как добавить запущенное приложение в качестве заголовка вкладки? Т.е. на какой вкладке работает emacs, mysql и т. Д.?
qazwsx

1
Т.е. все мои вкладки имеют одинаковый хост и пользователя. Поэтому их использование не будет отличать мои вкладки.
qazwsx

Ты имеешь в виду, что хочешь Показывать текущее имя работы из предпочтений iTerm? Обратите внимание, что связанная тема не касается имени пользователя или хоста.
Даниэль Бек

Хорошо, я хочу показать некоторые признаки того, какая программа запущена или была запущена на каждой вкладке. Кроме того, решение, приведенное в другом посте, не работает для Bash + iTerm2.
qazwsx

Ответы:


212

Поскольку вы используете iterm2 на Mac, вы можете просто нажать CmdI, напечатать что-нибудь и нажать ESC.

Терминальное решение немного быстрее, чем это, но просто хотел, чтобы вы знали.


11
Это работает на секунду, пока я не выдам возврат на вкладке, которую я переименовал.
Стьюи

15
@Stewie In Preferences -> Profiles -> Terminal, снимите флажок «Разрешить терминалу сообщать заголовок окна».
Макс Кантор

3
Это не проверено. Это все еще переименовывает название.
Стьюи

6
@SteveBennett - это не сама тема (на самом деле это «профиль»); команда CMD + I - «Изменить текущий сеанс ...» (в меню «Вид»), поэтому она просто изменяет экземпляр этой вкладки профиля. Нажатие Escape просто закрывает окно, что необходимо, поскольку в этом окне нет кнопки «Сохранить».
Полночь,

4
Что если у вас открыто несколько панелей? Нужно ли переименовывать каждую из них, чтобы полностью назвать саму вкладку?
Theicfire

119

Я нашел следующую функцию, помещенную в мою, ~/.bashrcчтобы быть полезной:

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

Затем я могу вызвать его из моего приглашения bash следующим образом:

> title I want a pony!

И моя вкладка получает соответствующее название.


1
Я попробовал это, но это все еще не работает. Я поместил это определение bash_aliasesи загрузил его в .profile( if [ -f ${HOME}/.bash_aliases ]; then . ${HOME}/.bash_aliases fi), но затем title dogне превратил заголовок вкладки в «собаку»
qazwsx

2
+1 - я добавил свой в / etc / profile, просто потому, что там мои псевдонимы ... не забудьте найти файл после того, как закончите. Примечание: это также работает в терминале.
blak3r

3
Очень полезно. Я хотел пони; и я получил один!
SoEzPz

1
Я положил свой в .bash_profile, перезапустил, и он работал как шарм.
С Джонсон

1
Те, кто думает, что это не работает, это потому что ваша командная строка мгновенно меняет ее обратно Попробуйте, title dog && sleep 5и вы увидите, что это работает. Обратите внимание на ответ @schpet, чтобы ответить на этот вопрос
Михаил

45

запустите эту команду, чтобы установить заголовок вашей вкладки или окна:

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

я добавил следующее, чтобы ~/.bash_profileвсегда отображать текущий каталог относительно моего домашнего каталога:

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

полезно, когда в доке 100 свернутых терминалов

хет кончик макинтошу


по какой-то причине экранирование в этой команде экспорта не сработало на моем bash (v5.0.7), вот что сработало для меня:export PROMPT_COMMAND='echo -ne "\033]0;${PWD/$HOME/\~}\007"'
Майк Фогель,

18

Я использовал решения, подобные вышеописанным, довольно давно, но я использую достаточно вкладок, поэтому я также хочу, чтобы они имели цветовую кодировку для удобства визуального ознакомления. Поэтому я выбрал tabset - утилиту для установки названия вкладки, значка и цвета в зависимости от вида работы, которую я выполняю на каждой вкладке.

пример

Требуется узел , но теперь это обычно устанавливаемая платформа. Установить:

npm install -g iterm2-tab-set

Это круто! Мне особенно нравится автоматическая настройка цвета вкладки. Спасибо!
Ашутош Джиндал

1
Вау! Это отличный инструмент!
dmulvi

В настоящее время я использую этот метод вместо метода, описанного в принятом ответе (<kbd> Cmd </ kbd> <kbd> I </ kbd>, введите что-нибудь и нажмите <kbd> ESC </ kbd>)
qazwsx

but that is now a commonly installed platformХахаха. Ха ... ха ...... подожди, ты серьезно ?
Фальшивое имя

Да, серьезно. Разработчики и разработчики DevOps - в наши дни естественная целевая аудитория терминальных приложений - установили node.js. Или можете установить его легко. Те, кто не / не может, могут вернуться к подходам на основе bash / zsh / и т.д.
Джонатан Юнис

16

Добавьте эту функцию в ваш ~/.bash_profileфайл, и она должна работать.

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

7

Мне нравится этот:

#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

Это позволит вам переключать имя вкладки между пользовательским именем и значением по умолчанию вашего CWD.

title -> заголовок вашей вкладки будет ~/YOUR_CWD/

title hey there -> заголовок вашей вкладки будет hey there


Обратите внимание, что, как есть, это будет препятствовать интеграции оболочки iTerm.
Майкл

5

Мне очень нравится ответ Тейлорстайн , но он нарушает интеграцию оболочки iTerm2, которая зависит от PROMPT_COMMANDпеременной. Вы можете изменить код Тейлора, чтобы исправить это, добавив __bp_precmd_invoke_cmdобратно в PROMPT_COMMANDлюбой момент, когда вы возитесь с ним:

# 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

Мне нравится ответ Майкла .

Но что, если .iterm2_shell_integration.bashне существует?

Вот мой дубль:

# 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
Обратите внимание, что в v3.1, iterm2_preexec_invoke_cmdстал__bp_precmd_invoke_cmd
Майкл

2

Если вы работаете с профилями (что очень удобно): Настройки -> Внешний вид -> Заголовки окон и вкладок: установите флажок «Показать имя профиля»:

образ

Вот как это выглядит после:

миниатюра, связанная с основным изображением


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

Комментарий Макса Кантора сработал для меня.


1

Я думаю, что автоматическое переключение профилей и значки предназначены именно для того, что вам нужно:

Автоматическое переключение профилей iTerm2 может использовать информацию, которую он знает о вашем текущем пути, имени хоста и имени пользователя, для изменения профилей. Например, цвет фона вашего окна или кодировка символов терминала могут измениться при подключении к разным хостам.

Значки Вы можете поместить значок в правом верхнем углу вашего терминала, отображающий информацию о текущем сеансе. Он может показать ваше имя пользователя, имя хоста или даже пользовательские данные, такие как текущая ветка git.

поэтому результат может выглядеть так:

введите описание изображения здесь


Пожалуйста, процитируйте основные части ответа по ссылочной ссылке (ссылкам), так как ответ может стать недействительным, если связанные страницы изменятся.
DavidPostill

0

Я хотел бы немного расширить ответ B Seven для абсолютной ясности.

Поскольку большинству из нас хотелось бы знать, как можно установить заголовок вкладки, даже если они не находятся в локальной оболочке, а не в удаленной оболочке (например, через ssh).

Шаг 1. Preferences -> Profiles -> Terminal uncheck Terminal may set Tab/Window title

Шаг 2. Для каждой вкладки double click on the tab -> Session Title

Теперь, что бы вы ни указали в заголовке сессии, все останется как есть.


-2

Юк, все эти псевдонимы и функции. Более простое решение (если вы root), вставьте его в терминал:

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

Или просто создайте заголовок вызова файла где-нибудь на вашем пути, или глобальный путь, и вставьте две строки между EOF.


12
"Юк со всеми этими псевдонимами." Вводимый ответ никто не может запомнить или напечатать вручную.
Дан

1
Не @Dan говоря , что это здорово, просто , что нет никакой необходимости , чтобы помнить , что , так как это просто создать скрипт titleв /usr/bin.
Эмиль Бержерон

@EmileBergeron thx, хотя кажется, что вы (мы) в меньшинстве. Ответ был только 1 строчка, остальное для ленивых людей.
Орвеллофил
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.