Ste*_*ver 6 zsh intellij-idea pycharm oh-my-zsh goland
我喜欢哦我的Zsh,但它在JetBrains产品的终端中从未正常工作:
哦我的Zsh是zsh shell扩充,所以实际问题可以减少到让zsh正常工作.在阅读了一些intellij问题之后,我尝试切换所有终端配置选项(单独和整体),以获得有用的效果.
Ste*_*ver 12
找不到二进制文件,无法运行的东西?显然是一个$ 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
Run Code Online (Sandbox Code Playgroud)
这暗示了启动文件加载问题.我的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
Run Code Online (Sandbox Code Playgroud)
这在IntelliJ中
/etc/zshrc
/Users/starver/.zshrc
Run Code Online (Sandbox Code Playgroud)
IntelliJ认为这不是登录shell.在Jetbrains终端配置中,您无法进入/bin/zsh --login; 它没有效果.玩了一下后,我发现启用工具 - >终端 - > Shell集成使终端成为"登录shell",启动文件加载故事有所改进:
/etc/zshrc
/Users/starver/.zprofile
/Users/starver/.zshrc
/Users/starver/.zlogin
Run Code Online (Sandbox Code Playgroud)
请注意,没有全局zsh启动文件,这是根本问题:/etc/zprofile包含:
# system-wide environment settings for zsh(1)
if [ -x /usr/libexec/path_helper ]; then
eval `/usr/libexec/path_helper -s`
fi
Run Code Online (Sandbox Code Playgroud)
哪个人路径_帮助者解释道:
path_helper实用程序读取目录/etc/paths.d和/etc/manpaths.d中文件的内容,并将其内容分别附加到PATH和MANPATH环境变量.(除非已在环境中设置,否则不会修改MANPATH环境变量.)
path_helper在shell启动期间至少执行一次非常重要: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
Run Code Online (Sandbox Code Playgroud)
现在,在IntelliJ终端启动时,我明白了
/etc/zshrc
/etc/zprofile
/Users/starver/.zprofile
/Users/starver/.shell-common
/etc/zshrc
/Users/starver/.zshrc
/Users/starver/.zlogin
Run Code Online (Sandbox Code Playgroud)
第一个/etc/zshrc是在插件之前执行的.zshrc,我无能为力,并没有造成任何不良副作用......
为每一个JetBrains产品重复这个过程,你可以在任何地方享受Oh My Zsh的乐趣.
注意:问题已通过https://youtrack.jetbrains.com/issue/IDEA-194488向JetBrains报告.
zsh --login --interactive
Run Code Online (Sandbox Code Playgroud)
为我工作terminal command,或简称:
zsh -li
Run Code Online (Sandbox Code Playgroud)
这将加载 Mac 中的 /etc/zprofile 和所有登录脚本。
尝试取消注释中的第一个字符串~/.zshrc:
# If you come from bash you might have to change your $PATH.
export PATH=$HOME/bin:/usr/local/bin:$PATH
Run Code Online (Sandbox Code Playgroud)
在我的情况下,使用 MacOSX,我只是更改 Shell Path
Preferences -> Tools -> Terminal -> Application Settings -> Shell path
替换/bin/sh为/bin/zsh
| 归档时间: |
|
| 查看次数: |
4454 次 |
| 最近记录: |