【问题标题】:iTerm2 Shell Integration and Oh My Zsh ConflictsiTerm2 Shell 集成和 Oh My Zsh 冲突
【发布时间】:2016-07-30 20:39:30
【问题描述】:

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

打开一个新的终端窗口后,一切似乎都正确,显示了来自 Oh My ZSH 的正确“agnoster”主题:

如果我发出clear,现在我的终端窗口如下所示:

我可以通过再次采购~/.zshrc 将事情恢复到原始状态,但我真的很好奇根本问题以及是否有任何方法可以解决它。

我尝试在 iTerm 的设置中隐藏标记,但这只会导致终端空白。

在之前的安装中(在我擦除这台 Mac 之前),我的 Oh My ZSH 和 Shell Integration 都在运行,虽然有时看起来有点不稳定,但不管清除终端或发出任何其他命令。

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

【问题讨论】:

  • gitlab 存在问题。也许它可以帮助你。
  • @NaN - 谢谢,这看起来是问题所在!我能够使用下面的解决方案,现在一切正常。 :)

标签: shell iterm2 oh-my-zsh


【解决方案1】:

对于仍然遇到此问题的任何人,现在 iterm 的配置文件设置中有一个选项允许您禁用这些“标记”(在“标记”部分 on this page 中有详细说明)

  1. 打开 iterm 首选项
  2. 选择“个人资料”
  3. 选择个人资料
  4. 选择“终端”标签
  5. 取消选中“Shell 集成 > 显示标记指示器”复选框

Screenshot of the setting within iterm preferences

【讨论】:

    【解决方案2】:

    我刚刚在 iTerm 2 (Build 2.9.20160313) 中安装了 Shell 集成并且遇到了完全相同的问题。

    我解决它的方法是在第 3 行的 export ITERM_SHELL_INTEGRATION_INSTALLED=Yes 之后向 ~/.iterm2_shell_integration.zsh 添加一行:

    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"
        }
    
        # ...
    

    这可能是一个错误,因为(从同一文件中的 cmets 可以看出)脚本应该在登录时保存您的 $PS1,但事实并非如此。

    【讨论】:

    • 这就像一个魅力!谢谢你的快速反应。现在我可以开始工作了! :)
    • 我也评论第 4 行:ITERM2_SHOULD_DECORATE_PROMPT="1"
    【解决方案3】:

    迟到的答案,但这对我有用。

    iTerm2 Shell 集成页面让您下载安装脚本并将其通过管道传输到 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
    

    【讨论】:

    • 感谢这对我有用。问题是:尽管我出于某种原因使用 zsh,但 SHELL 变量是 bash!将它硬编码到 zsh 就可以了!
    • 这不再是必要的,因为该错误已得到修复。无论如何,它仍然显示如何安装集成。
    猜你喜欢
    • 2018-01-12
    • 1970-01-01
    • 2015-06-20
    • 1970-01-01
    • 1970-01-01
    • 2020-05-15
    • 2017-05-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多