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

176

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

qazwsx
источник
1
возможное дублирование окна Change и заголовков iTerm2 в zsh
Даниэль Бек
Не совсем дубликат. Итак, как добавить запущенное приложение в качестве заголовка вкладки? Т.е. на какой вкладке работает emacs, mysql и т. Д.?
qazwsx
1
Т.е. все мои вкладки имеют одинаковый хост и пользователя. Поэтому их использование не будет отличать мои вкладки.
qazwsx
Ты имеешь в виду, что хочешь Показывать текущее имя работы из предпочтений iTerm? Обратите внимание, что связанная тема не касается имени пользователя или хоста.
Даниэль Бек
Хорошо, я хочу показать некоторые признаки того, какая программа запущена или была запущена на каждой вкладке. Кроме того, решение, приведенное в другом посте, не работает для Bash + iTerm2.
qazwsx

Ответы:

212

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

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

mawaldne
источник
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 свернутых терминалов

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

schpet
источник
по какой-то причине экранирование в этой команде экспорта не сработало на моем 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"'
}
jiangyu7408
источник
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

taylorstine
источник
Обратите внимание, что, как есть, это будет препятствовать интеграции оболочки 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
user1318024
источник
1
Обратите внимание, что в v3.1, iterm2_preexec_invoke_cmdстал__bp_precmd_invoke_cmd
Майкл
2

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

образ

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

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

aianitro
источник
2
Preferences -> Profiles -> Terminal
  uncheck Terminal may set Tab/Window title

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

Б Семерка
источник
1

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

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

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

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

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

lengxuehx
источник
Пожалуйста, процитируйте основные части ответа по ссылочной ссылке (ссылкам), так как ответ может стать недействительным, если связанные страницы изменятся.
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.

Orwellophile
источник
12
"Юк со всеми этими псевдонимами." Вводимый ответ никто не может запомнить или напечатать вручную.
Дан
1
Не @Dan говоря , что это здорово, просто , что нет никакой необходимости , чтобы помнить , что , так как это просто создать скрипт titleв /usr/bin.
Эмиль Бержерон
@EmileBergeron thx, хотя кажется, что вы (мы) в меньшинстве. Ответ был только 1 строчка, остальное для ленивых людей.
Орвеллофил