iTerm2 Shell Integration 和 Oh My Zsh 冲突

22

我最近重新安装了iTerm2并在设置好iTerm的Shell Integration后遇到了一个有趣的问题。

打开一个新的终端窗口时,一切似乎看起来都正确,显示了正确的Oh My ZSH的"agnoster"主题:

working

但是如果我输入clear,现在我的终端窗口看起来像这样:

not working

我可以通过再次执行~/.zshrc来恢复原始状态,但我真的很好奇根本原因,并且是否有任何方法可以修复它。

我尝试隐藏iTerm设置中的标记,但结果只是得到了一个空白终端。

在之前的安装过程中(在我清除这个Mac之前),我同时使用了Oh My ZSH和Shell Integration,虽然有时看起来有些奇怪,但似乎仍然保持了Oh My ZSH的主题,无论是否清除了终端或发出任何其他命令。

有人对此有任何想法吗?我一遍又一遍地检查了iTerm设置,但似乎找不到任何相关的东西。


这里有一个 gitlab 的问题。也许它可以帮助你。 - NaN
@NaN - 谢谢,这似乎是问题所在!我能够使用下面的解决方案,现在一切都完美运行。 :) - Will
3个回答

16

回答晚了,但这对我有效。

iTerm2 Shell Integrations页面会让你下载安装脚本并将其导入bash中。

相反地,请将其下载到本地并进行修改,以便它知道您正在使用ZSH。

首先,下载该脚本。

wget https://iterm2.com/misc/install_shell_integration.sh

那么,不要让脚本确定 shell 类型,而是将其定义为 "zsh"。

# comment out this line
# SHELL=$(echo "${SHELL}" | tr / "\n" | tail -1)

# replace it with this line
SHELL="zsh"

接下来,将安装脚本变为可执行文件,然后运行它

chmod +x install_shell_integration.sh
./install_shell_integration.sh

之后应该正确安装集成。

注意 如果您不需要它,请删除Bash集成。

rm ~/.iterm2_shell_integration.bash

2
谢谢,这对我有用。问题是:尽管我正在使用zsh,但某种原因我的SHELL变量是bash!将其硬编码为zsh就解决了问题! - Geek
1
这已经不再必要了,因为该漏洞已经被修复。无论如何,它仍然展示了如何安装集成。 - noun

12

我刚刚在 iTerm 2(版本:2.9.20160313)中安装了 Shell 集成,遇到了完全相同的问题。

我解决这个问题的方法是在 ~/.iterm2_shell_integration.zsh 文件的第3行的 export ITERM_SHELL_INTEGRATION_INSTALLED=Yes 后面添加一行代码:

ITERM2_PRECMD_PS1="$PS1"

这样,文件的头部看起来应该是这样的:

if [[ -o login ]]; then
  if [ "$TERM" != "screen" -a "$ITERM_SHELL_INTEGRATION_INSTALLED" = "" ]; then
    export ITERM_SHELL_INTEGRATION_INSTALLED=Yes

    ## BEGIN EDIT
    ITERM2_PRECMD_PS1="$PS1"
    ## END EDIT

    # Indicates start of command output. Runs just before command executes.
    iterm2_before_cmd_executes() {
      printf "\033]133;C;\007"
    }

    # ...

很可能是一个错误,因为(正如您可以从同一文件中的注释中看到的)脚本应该在登录时保存您的$PS1,但它没有。


1
这个运行得非常好!感谢您的快速回复。现在我可以开始工作了! :) - Will
3
我也注释了第4行:ITERM2_SHOULD_DECORATE_PROMPT="1" - Jorge Maroto

4

如果您仍然遇到这个问题,现在在iterm的配置设置中有一个选项,允许您禁用这些“标记”(在此页面的“标记”部分有详细说明)

  1. 打开iterm首选项
  2. 选择“配置文件”
  3. 选择配置文件
  4. 选择“终端”选项卡
  5. 取消选中“Shell Integration > 显示标记指示器”复选框

iterm首选项内设置截图


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接