iTerm2 Shell集成和我的Zsh冲突

Wil*_*ill 14 shell iterm2 oh-my-zsh

我最近重新安装了iTerm2,现在在设置iTerm的Shell Integration之后遇到了一个有趣的问题.

打开一个新的终端窗口后,一切看起来都很正确,显示出来自Oh My ZSH的正确"agnoster"主题:

工作的

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

不工作

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

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

在之前的安装中(在我擦除这台Mac之前),我有哦我的ZSH和Shell集合都在进行,虽然它看起来有点不稳定,但它似乎仍然保留了Oh My ZSH主题,无论是清除终端还是发布任何其他命令.

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

use*_*929 13

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

您可以在iTerm2 Shell Integrations页面下载安装脚本并将其传输到bash中.

相反,在本地下载并修改它,以便它知道您正在使用ZSH.

首先,下载脚本

wget https://iterm2.com/misc/install_shell_integration.sh
Run Code Online (Sandbox Code Playgroud)

然后,而不是让脚本确定shell只是将其定义为"zsh"

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

# replace it with this line
SHELL="zsh"
Run Code Online (Sandbox Code Playgroud)

接下来,使安装脚本可执行,然后运行它

chmod +x install_shell_integration.sh
./install_shell_integration.sh
Run Code Online (Sandbox Code Playgroud)

之后,应正确安装集成.

注意 如果不需要,删除Bash集成.

rm ~/.iterm2_shell_integration.bash
Run Code Online (Sandbox Code Playgroud)

  • 谢谢这对我有用.问题是:即使我出于某种原因使用zsh,SHELL变量也是bash!硬编码到zsh就行了! (2认同)

luc*_*cag 12

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

我解决它的方法是在第3 行~/.iterm2_shell_integration.zsh之后添加 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"
    }

    # ...
Run Code Online (Sandbox Code Playgroud)

这可能是一个错误,因为(正如你可以从同一文件中的注释中看到的)脚本应该保存你$PS1的登录,但事实并非如此.

  • 我还评论第4行:`ITERM2_SHOULD_DECORATE_PROMPT ="1"` (3认同)