Как мне заставить IntelliJ Terminal правильно работать с Oh My Zsh? - PullRequest
0 голосов
/ 24 июня 2018

Я люблю Oh My Zsh, но он никогда не работал должным образом в терминалах продукта JetBrains:

  • не может найти исполняемые файлы
  • не может использовать менеджеры версий, такие как pyenv, sdkman, rvm

Oh My Zsh - это расширение оболочки zsh, поэтому реальная проблема может быть сведена к тому, чтобы заставить zsh работать правильно.Я попытался переключить все параметры конфигурации терминала (индивидуально и в массовом порядке) после прочтения некоторых проблем с intellij, но безрезультатно.

ref: https://github.com/robbyrussell/oh-my-zsh

Ответы [ 4 ]

0 голосов
/ 29 января 2019
zsh --login --interactive

Работал для меня как terminal command, или для краткости:

zsh -li

Это загрузит / etc / zprofile в Mac и все сценарии входа.

0 голосов
/ 21 сентября 2018

Попробуйте раскомментировать первую строку в ~/.zshrc:

# If you come from bash you might have to change your $PATH.
export PATH=$HOME/bin:/usr/local/bin:$PATH

Это помогло мне.

0 голосов
/ 24 октября 2018

Я могу подтвердить все в этом ответе , но есть более простой обходной путь, основанный на том факте, что загрузка path_helper дважды не имеет значения.

Так что, пока JetBrains не исправит ихТерминальный плагин, просто поместите source /etc/zprofile в ваш ~/.zshrc файл и получите прибыль!

0 голосов
/ 24 июня 2018

Не можете найти двоичные файлы, не можете запустить что-то? Очевидно, проблема $ PATH, но что и почему?

Я нашел хороший путь в iTerm2

/Users/starver/.sdkman/candidates/maven/current/bin:/Users/starver/.sdkman/candidates/groovy/current/bin:/Users/starver/.sdkman/candidates/gradle/current/bin:/usr/local/Cellar/pyenv-virtualenv/1.1.3/shims:/Users/starver/.pyenv/shims:/Users/starver/.pyenv/bin:/Users/starver/.cargo/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/go/bin:/opt/X11/bin:/usr/local/git/bin:/Users/starver/bin/:/Users/starver/code/go/bin/:/Users/starver/.rvm/bin

и в IntelliJ:

/usr/bin:/bin:/usr/sbin:/sbin

Это указывает на проблему с загрузкой файла при запуске. Моя страница руководства zsh говорит, что порядок загрузки должен быть:

  • /etc/zshenv
  • $ZDOTDIR/.zshenv
  • Если оболочка входа:
    • /etc/zprofile
    • $ZDOTDIR/.zprofile
  • Если интерактивная оболочка:
    • /etc/zshrc
    • $ZDOTDIR/.zshrc
  • Если оболочка входа:
    • /etc/zlogin
    • $ZDOTDIR/.zlogin

После добавления echo к каждому из существующих файлов я получил следующее для iTerm2:

/etc/zprofile
/Users/starver/.zprofile
/etc/zshrc
/Users/starver/.zshrc
/Users/starver/.zlogin

и это в IntelliJ

/etc/zshrc
/Users/starver/.zshrc

IntelliJ считает, что это не оболочка для входа. В конфигурации терминала Jetbrains вы не можете ввести /bin/zsh --login; это не имеет никакого эффекта. Немного поиграв, я обнаружил, что включение Tools -> Terminal -> Shell Integration делает терминал «оболочкой входа», и история загрузки файла запуска немного улучшилась:

/etc/zshrc
/Users/starver/.zprofile
/Users/starver/.zshrc
/Users/starver/.zlogin

Обратите внимание, что ни один из глобальных файлов запуска zsh и это корневая проблема: /etc/zprofile содержит:

# system-wide environment settings for zsh(1)
if [ -x /usr/libexec/path_helper ]; then
    eval `/usr/libexec/path_helper -s`
fi

который man path_helper объясняет:

Утилита path_helper считывает содержимое файлов в каталогах /etc/paths.d и /etc/manpaths.d и добавляет их содержимое в переменные среды PATH и MANPATH соответственно. (Переменная среды MANPATH не будет изменена, если она уже не установлена ​​в среде.)

Выполнение path_helper хотя бы один раз во время запуска оболочки ДЕЙСТВИТЕЛЬНО важно: paths и paths.d - это место, где системные и сторонние установщики определяют свои пути добавления. Не запускается файл запуска системного профиля, поэтому /usr/local/bin, /usr/local/go и т. Д. Не находятся в пути.

Я попробовал несколько подходов, ища элегантное решение. По-видимому, реализация терминала jediterm предотвращает подключение к стандартному процессу запуска терминала - поэтому они осуществляют загрузку файла запуска в /Applications/IntelliJ IDEA.app/Contents/plugins/terminal/.zshrc. Мы можем исправить эту реализацию !! Замените этот файл на:

#!/bin/zsh

# starver mod
# Jetbrains uses jediterm as a java terminal emulator for all terminal uses.
# There are some apparent limits on use:
# - must use old-style shebang - not the #!/usr/bin/env zsh
# - must implement the startup file loading here
#
# Note: original contents are in lib/terminal.jar

# mappings for Ctrl-left-arrow and Ctrl-right-arrow for word moving
bindkey '^[^[[C' forward-word
bindkey '^[^[[D' backward-word

ZDOTDIR=$_OLD_ZDOTDIR

if [ -n "$JEDITERM_USER_RCFILE" ]
then
  source "$JEDITERM_USER_RCFILE"
  unset JEDITERM_USER_RCFILE
fi

if [ -n "$ZDOTDIR" ]
then
  DOTDIR=$ZDOTDIR
else
  DOTDIR=$HOME
fi

if [ -f "/etc/zshenv" ]; then
     source "/etc/zshenv"
fi

if [ -f "$DOTDIR/.zshenv" ]; then
     source "$DOTDIR/.zshenv"
fi

if [ -n $LOGIN_SHELL ]; then
  if [ -f "/etc/zprofile" ]; then
       source "/etc/zprofile"
  fi
  if [ -f "$DOTDIR/.zprofile" ]; then
       source "$DOTDIR/.zprofile"
  fi
fi

if [ -f "/etc/zshrc" ]; then
     source "/etc/zshrc"
fi

if [ -f "$DOTDIR/.zshrc" ]; then
     source "$DOTDIR/.zshrc"
fi

if [ -n $LOGIN_SHELL ]; then
  if [ -f "/etc/zlogin" ]; then
       source "/etc/zlogin"
  fi
  if [ -f "$DOTDIR/.zlogin" ]; then
       source "$DOTDIR/.zlogin"
  fi
fi

if [ -n "$JEDITERM_SOURCE" ]
then
  source $(echo $JEDITERM_SOURCE)
  unset JEDITERM_SOURCE
fi

Теперь при запуске терминала IntelliJ я вижу

/etc/zshrc
/etc/zprofile
/Users/starver/.zprofile
/Users/starver/.shell-common
/etc/zshrc
/Users/starver/.zshrc
/Users/starver/.zlogin

Первый /etc/zshrc выполняется до .zshrc плагина, я ничего не могу с этим поделать, и он не вызывает каких-либо плохих побочных эффектов ...

Повторите этот процесс для каждого продукта JetBrains, и вы сможете насладиться радостью, которая повсюду - Oh My Zsh.

Примечание : ошибка сообщена JetBrains в https://youtrack.jetbrains.com/issue/IDEA-194488.

...