Интеграция оболочки iTerm2 и конфликты Oh My Zsh

Недавно я установил iTerm2, и теперь у меня возникла интересная проблема после настройки интеграции iTerm Shell.

После открытия нового окна терминала все выглядит корректно, показывая правильную тему "agnoster" от Oh My ZSH:

working

Если я выдаю clear, теперь мое окно терминала выглядит следующим образом:

не работает

Я могу вернуться к исходному состоянию с помощью поиска ~/.zshrc еще раз, но мне действительно интересно узнать о проблеме с корнем и если есть способ исправить его.

Я попытался скрыть маркер в настройках iTerm, но это просто приводит к пустому терминалу.

В предыдущей установке (до того, как я уничтожил этот Mac), у меня была Oh My ZSH и Shell Integration, и, хотя временами это выглядело как-то странно, все же, похоже, она сохраняла тему Oh My ZSH независимо от того, терминала или выдачи любой другой команды.

Есть ли у кого-нибудь идеи по этому поводу? Я проверял настройки iTerm снова и снова, но не могу найти ничего, что было бы связано.

Ответ 1

Я только что установил Интеграцию Shell в iTerm 2 (Build 2.9.20160313) и имел ту же самую проблему.

То, как я решил это, было добавление единственной строки в ~/.iterm2_shell_integration.zsh сразу после export ITERM_SHELL_INTEGRATION_INSTALLED=Yes в строке 3:

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

    # ...

Вероятно, это ошибка, поскольку (как вы можете видеть из комментариев в том же файле) script должен сохранить ваш $PS1 при входе в систему, но это не так.

Ответ 2

Поздний ответ, но это сработало для меня.

На странице iTerm2 Shell Integrations вы загрузите установку script и переместите ее в bash.

Вместо загрузите его локально и измените, чтобы он знал, что вы используете ZSH.

Сначала загрузите script

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

Затем вместо того, чтобы script определить оболочку, просто определите ее как "zsh"

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

# replace it with this line
SHELL="zsh"

Затем создайте исполняемый файл install script, а затем запустите его

chmod +x install_shell_integration.sh
./install_shell_integration.sh

После этого интеграция должна быть правильно установлена.

Примечание Удалите интеграцию Bash, если она вам не нужна.

rm ~/.iterm2_shell_integration.bash