Як називати вкладки за допомогою Bash + iTerm2?


176

У iTerm2 (Build 1.0.0.20120203) я, як правило, відкриваю кілька вкладок, кожна з яких має розділені панелі, і стосується однієї конкретної теми роботи, наприклад, контроль редагування, кодування, керування файлами, робота терміналу mysql. Зазвичай мені потрібно перемикатися між 5 або більше вкладок у моєму потоці роботи. Іноді важко запам’ятати або сказати, що це, дивлячись на зміст екрану. Я б хотів якось назвати вкладки, тому я швидко зможу сказати, що це таке, швидко поглянувши. Чи можливо це?



Не зовсім дублікат. Тож як додати додаток, що працює в даний момент, як частину заголовка вкладки? Тобто на якій вкладці працює 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 просто закриває вікно, що потрібно, оскільки в ньому немає кнопки "збереження".
опівночіLightning

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, перезапустив, і це спрацювало як шарм.
C Джонсон

1
Ті, хто думає, що це не працює, це тому, що ваш командний рядок миттєво змінює його назад. Спробуйте, title dog && sleep 5і ви побачите, що це працює. Зверніть увагу на відповідь @schpet, щоб вирішити цю проблему
Михайло

45

запустіть цю команду, щоб встановити назву вкладки чи вікна:

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

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

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

корисно, коли у вашому доку є 100 мінімізованих терміналів

підказка капелюха до світу mac


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

18

Я досить довго використовував рішення, подібні до вищезазначених, але я використовую достатню кількість вкладок, які я також хочу, щоб вони були кольоровими для легкого візуального посилання. Тож я підключив набір таблиць , утиліту для встановлення заголовка, значка та кольору вкладки залежно від роботи, яку я виконую в кожній вкладці.

приклад

Для цього потрібен вузол , але це зараз загальновстановлена ​​платформа. Щоб встановити:

npm install -g iterm2-tab-set

Це круто! Я особливо люблю автоматичну настройку кольору вкладки. Дякую!
Ашутош Джиндал

1
Оце Так! Це чудовий інструмент!
dmulvi

Зараз я використовую цей метод замість описаного у прийнятій відповіді (<kbd> Cmd </kbd> <kbd> я </kbd>, наберіть щось та натисніть <kbd> ESC </kbd>)
qazwsx

but that is now a commonly installed platformХа-ха-ха ... ха ......, почекай, ти серйозно ?
Підроблене ім’я

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

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
Michael

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.