在zsh中更改iTerm2窗口和选项卡标题


50

我想标记终端会话的窗口选项卡。我在OSX的iterm2中使用zshell。是否可以在终端中动态更改窗口选项卡的标签?

Answers:


48

您可以输入以下内容zsh来设置iTerm2的窗口标题:

echo -ne "\e]1;this is the title\a"

如果要自动插入例如当前时间或工作目录,请编辑zsh配置文件以将precmd()函数标题设置为例如$PWD

echo -ne "\e]1;$PWD\a"

您可以在部分中阅读有关此precmd功能man zshmisc的信息SPECIAL FUNCTIONS

在此处输入图片说明


3
当我执行命令echo -ne“ \ e] 1;这是标题\ a时,选项卡标题不会更改。iterm2是否需要更改设置?
bneil 2011年

15
弄清楚了。我必须在iterm-> preferences-> appearance部分中取消选择窗口和标签标题的所有选项。在.zshrc中,我必须取消注释/添加导出DISABLE_AUTO_TITLE =“ true”,谢谢@Daniel Beck
bneil 2011年

3
您还需要设置Profiles > Terminal > Terminal Emulation > Terminal may set tab/window title
vaughan

1
这在iTerm的最新版本(3.3.0)中不起作用(至少对我来说)
iconoclast

而且不适用于iTerm2(3.2.9)的最新稳定版本
jalanb

45

什么对我有用:

echo -e "\033];this is the title\007"

如果使用Mac OSX和iTerm,则iTerm2 ::

  • iTerm→首选项→外观→窗口和选项卡标题→取消选中所有

如果使用zsh,则可能需要编辑设置。您的设置通常在文件中~/.zshrc。您要添加或编辑设置以确保此行存在:

DISABLE_AUTO_TITLE="true"

2
截至2018年2月28日,它仍然有效。
salep

38

使用iTerm的便利之一是可以分别设置窗口标题和标签标题: 分别使用标签和窗口标题的示例

# $1 = type; 0 - both, 1 - tab, 2 - title
# rest = text
setTerminalText () {
    # echo works in bash & zsh
    local mode=$1 ; shift
    echo -ne "\033]$mode;$@\007"
}
stt_both  () { setTerminalText 0 $@; }
stt_tab   () { setTerminalText 1 $@; }
stt_title () { setTerminalText 2 $@; }

这样,您可以立即在哪个窗口中查看连接到的主机,每个选项卡的窗口标题显示用户和CWD。


2
我只是注意到OS X Lion中的Terminal.app版本也支持此功能。
Orangenhain 2011年

愚蠢的问题:您将这些代码添加到.bashrc,对吗?
qazwsx 2012年

还会出现(在iTerm2 Build 1.0.0.20140629中),​​直到您更改“窗口标题”为止。无论如何,它都会跟踪选项卡标题。我确定这是一个设置。更改窗口标题(2)后,它将不再跟踪选项卡标题。
2014年

我修改了上面的功能,以包含DISABLE_AUTO_TITLE="true"解决问题的行,这样,如果我不设置标题,我仍然会获得自动标题功能
user15681 2015年

5

一个precmd是卓有成效的。但是,某些oh-my-zsh主题会与窗口标题混淆。设置PR_TITLEBAR为空字符串即可修复它。

set-window-title() {
  # /Users/clessg/projects/dotfiles -> ~/p/dotfiles
  window_title="\e]0;${${PWD/#"$HOME"/~}/projects/p}\a"
  echo -ne "$window_title"
}

PR_TITLEBAR=''
set-window-title
add-zsh-hook precmd set-window-title

我还建议您在“首选项”->“外观”中使用iTerm2的标签设置。



2

对于我来说,所有答案似乎都没有用,可能对于iterm2版本(3.3.3)。

我发现了这一点:https : //gist.github.com/phette23/5270658#gistcomment-3020766

本质上,您可以执行所有其他答案中所述的任何操作,但还需要设置 Preferences > Profiles > General > Title -> Name (Job)

这对我有用。


它不在General标签下,而是在Profiles标签下
Falmarri

对。我错过了> Profiles一个。我的错。更新。
NunoGonçalves

1

接受的答案对我有用了很长时间,但现在在最新版本的iTerm2中已被打破。我发现一种解决方法是启用Python API并创建一个脚本来设置选项卡名称,如下所示:

#!/usr/bin/env python3.7
import argparse

import iterm2

def get_args():
    parser = argparse.ArgumentParser(description='Set the tab name')
    parser.add_argument('name')
    return parser.parse_args()

ARGS = get_args()

async def main(connection):
    app = await iterm2.async_get_app(connection)
    window = app.current_terminal_window
    if window is not None:
        tab = window.current_tab
        await tab.async_set_title(ARGS.name)
    else:
        # You can view this message in the script console.
        print("No current window")

iterm2.run_until_complete(main)

另存为“ tab_name.py”,然后调用:

~/Library/ApplicationSupport/iTerm2/iterm2env/versions/*/bin/python3 ~/Library/ApplicationSupport/iTerm2/Scripts/tab_name.py "new tab name"

它不如公认的答案好或优雅,但它可以工作。


-2

iTerm->首选项->外观->窗口和标签标题->选中显示配置文件名称选项


1
欢迎来到超级用户!在此问答网站上,我们试图为人们提出的问题提供良好的答案。编写一个好的答案的一部分是为提出的解决方案提供上下文。请编辑您的答案,并解释您的解决方案为何起作用,以及具体如何起作用。
cascer1'1
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.