Oh My Zshは大好きですが、JetBrains製品のターミナルではこれまで正常に機能したことがありません。
Oh My Zshはzsh Shellの拡張であるため、実際の問題はzshを適切に機能させることだけに減らすことができます。私はいくつかのintellijの問題を読んだ後、すべてのターミナル構成オプション(個別におよびまとめて)を有効に切り替えてみました。
バイナリを見つけられません、何かを実行できませんか?明らかに$ 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
を入力できません。影響はありません。少し遊んだ後、[ツール]-> [ターミナル]-> [シェル統合]をオンにすると、ターミナルが「ログインシェル」になり、起動ファイルのロードストーリーが少し改善されました。
/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
path_helperが説明する男:
Path_helperユーティリティは、ディレクトリ/etc/paths.dおよび/etc/manpaths.d内のファイルの内容を読み取り、それらの内容をそれぞれPATHおよびMANPATH環境変数に追加します。 (MANPATH環境変数は、環境ですでに設定されていない限り、変更されません。)
シェルの起動時にpath_helper
を少なくとも1回実行することは非常に重要です。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の喜びを味わうことができます。
注:問題は https://youtrack.jetbrains.com/issue/IDEA-194488 でJetBrainsに報告されました。
zsh --login --interactive
terminal command
、または略して私のために働きました:
zsh -li
これにより、Macおよびすべてのログインスクリプトに/ etc/zprofileがロードされます。
私はすべてを確認できます この回答では ですが、path_helper
を2回ロードすることは重要ではないという事実に基づいて、より簡単な回避策があります。
したがって、JetBrainsがターミナルプラグインを修正するまで、source /etc/zprofile
を~/.zshrc
ファイルに追加して利益を上げてください。
Zshでsdkmanを修正するには、次の行を実行します。
echo 'source "$HOME/.sdkman/bin/sdkman-init.sh"' >> ~/.zshrc
~/.zshrc
の最初の文字列のコメントを外してみてください:
# If you come from bash you might have to change your $PATH.
export PATH=$HOME/bin:/usr/local/bin:$PATH
それは私を助けました。