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

bne*_*eil 61 zsh command-line iterm osx-snow-leopard

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

Dan*_*eck 52

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

echo -ne "\e]1;this is the title\a"
Run Code Online (Sandbox Code Playgroud)

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

echo -ne "\e]1;$PWD\a"
Run Code Online (Sandbox Code Playgroud)

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

在此处输入图片说明

  • 弄清楚了。我必须在 iterm->preferences->appearance 部分取消选择窗口和选项卡标题的所有选项。在 .zshrc 中,我必须取消注释/添加 export DISABLE_AUTO_TITLE="true" 谢谢@Daniel Beck (18认同)
  • 您还需要设置“配置文件 > 终端 > 终端仿真 > 终端可能设置选项卡/窗口标题”。 (5认同)
  • 当我执行命令 echo -ne "\e]1;this is the title\a" 选项卡标题不会改变。在 iterm2 中有我必须更改的设置吗? (4认同)

小智 50

什么对我有用:

echo -e "\033];this is the title\007"
Run Code Online (Sandbox Code Playgroud)

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

  • iTerm ? 喜好 ?外貌 ?窗口和标签标题?取消所有

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

DISABLE_AUTO_TITLE="true"
Run Code Online (Sandbox Code Playgroud)

  • 截至 2018 年 2 月 28 日,它仍然有效。 (2认同)
  • `DISABLE_AUTO_TITLE` 是一个 Oh My Zsh 功能,而不是 zsh (2认同)

Ora*_*ain 41

使用 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 $@; }
Run Code Online (Sandbox Code Playgroud)

通过这种方式,您可以立即看到您在哪个窗口中连接到哪个主机,并且每个选项卡的窗口标题显示用户和 CWD。

  • 我刚刚注意到 OS X Lion 中的 Terminal.app 版本也支持这一点。 (2认同)

小智 5

Aprecmd可以解决问题。但是,一些 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
Run Code Online (Sandbox Code Playgroud)

我还建议在首选项 -> 外观中使用 iTerm2 的选项卡设置。