当交互使用时zsh
,我希望它能够模拟sh
尽可能多的行为。我尝试添加emulate sh
到 的末尾~/.zshrc
,但由于我使用的是依赖于的 zsh 插件emulate zsh
(例如vcs_info
,zsh-自动建议, 和zsh-语法高亮),以交互方式运行 zsh 后,我收到如下错误消息:
vcs_info(): expecting numeric arg >= 1 for max-exports (got 2).
Defaulting to 2.
VCS_INFO_set:12: bad math expression: illegal character: {
_zsh_highlight:17: bad set of key/value pairs for associative array
上面的错误表明它emulate sh
正在影响 zsh 插件,这些插件需要 zsh 模拟。仅对用户交互输入的 shell 命令启用 sh 模拟模式,同时对 zsh 的其余部分保留 zsh 模拟模式的正确方法是什么?
我已将下面的代码添加到末尾~/.zshrc
以尝试解决该问题。它似乎工作正常,但我不知道它是否真正正确。我也不知道它是如何/为什么起作用的。
function precmd_emulate_zsh() {
emulate zsh
}
function preexec_emulate_sh() {
emulate sh
}
autoload -Uz add-zsh-hook
add-zsh-hook -Uz precmd precmd_emulate_zsh
add-zsh-hook -Uz preexec preexec_emulate_sh