使用Bash + iTerm2,如何命名标签?


176

在iTerm2(内部版本1.0.0.20120203)中,我通常打开几个选项卡,每个选项卡都具有拆分窗格,并且与某个特定的工作主题有关,例如,版本控制,编码,管理文件,mysql终端工作。我通常需要在工作流程中的5个或更多选项卡之间切换。有时很难通过查看屏幕内容来记住或分辨出哪个。我想以某种方式命名标签,因此我可以快速浏览一下,从而快速分辨出哪个标签。这可能吗?



不完全重复。那么,如何将当前正在运行的应用添加为标签标题的一部分呢?即哪个选项卡正在运行emacs,mysql等?
qazwsx 2012年

1
即我所有的选项卡都具有相同的主机和用户。因此,使用这些选项不会区分我的标签。
qazwsx 2012年

您是说要从iTerm的首选项显示当前职位名称?请注意,链接的主题与用户名或主机无关。
丹尼尔·贝克

正确,我想在每个选项卡中显示一些有关正在运行或正在运行的程序的指示。另外,另一篇文章中给出的解决方案不适用于Bash + iTerm2。
qazwsx 2012年

Answers:


212

由于您在Mac上使用iterm2,因此另一个选择是您可以点击CmdI,键入内容并点击ESC

终端解决方案比这快一点,但是只是想让您知道。


11
这会持续一秒钟,直到我在重命名的选项卡上发出退货为止。
Stewie 2014年

15
@Stewie在“首选项”->“配置文件”->“终端”中,取消选中“允许终端报告报告窗口标题”。
Max Cantor 2014年

3
未选中。它仍然重命名标题。
Stewie 2014年

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,并将其加载到.profileif [ -f ${HOME}/.bash_aliases ]; then . ${HOME}/.bash_aliases fi)中,但随后title dog没有将制表符标题转换为“ dog”
qazwsx

2
+1-我在/ etc / profile中添加了我的名字,只是因为这就是我的别名...不要忘了在完成后提供源文件。注意:这也适用于终端。
blak3r 2013年

3
很有帮助。我想要一匹小马;我有一个!
SoEzPz

1
我把我的文件放在.bash_profile中,重新启动,它就像一个魅力一样工作。
C约翰逊

1
那些认为它不起作用的原因是因为您的命令提示符立即将其改回了。试试看title dog && sleep 5,您会发现它有效。请注意@schpet给出的答案,以解决这一问题
Mikhail,

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个最小化的终端时很有用

Mac World的帽子提示


由于某些原因(v5.0.7),在我的bash上转义该出口命令并不能很好地工作,这对我有用:export PROMPT_COMMAND='echo -ne "\033]0;${PWD/$HOME/\~}\007"'
Mike Fogel

18

我使用了与上述类似的解决方案已有一段时间,但我使用了足够多的标签,因此我也希望它们使用颜色进行编码,以便于视觉参考。因此,我启动了tabset,该实用程序可根据我在每个标签中所做的工作类型来设置标签标题,徽章和颜色。

例

它需要node,但是现在这是一个普遍安装的平台。安装:

npm install -g iterm2-tab-set

这太棒了!我特别喜欢选项卡颜色的自动设置。谢谢!
Ashutosh Jindal

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 / 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 Shell集成。
迈克尔

5

我真的很喜欢taylorstine的答案,但是它破坏了iTerm2 依赖于变量的shell集成PROMPT_COMMAND。您可以修改Taylor的代码来纠正此问题,方法是__bp_precmd_invoke_cmdPROMPT_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

Max Cantor的评论对我有用。


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

k,所有这些别名和功能。更简单的解决方案(如果您是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
“ Yuk带着所有这些别名。” 输入答案没人会记得或用手打字。
2013年

1
@Dan并不是说这很棒,只是因为它只是创建一个名为titlein 的脚本,因此无需记住这一点/usr/bin
Emile Bergeron

@EmileBergeron thx,尽管看来您(我们)是少数派。答案只有1行,其余的都是针对懒惰的人的。
Orwellophile
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.