如何仅在交互使用 zsh 时启用 sh 模拟模式

如何仅在交互使用 zsh 时启用 sh 模拟模式

当交互使用时zsh,我希望它能够模拟sh尽可能多的行为。我尝试添加emulate sh到 的末尾~/.zshrc,但由于我使用的是依赖于的 zsh 插件emulate zsh(例如vcs_infozsh-自动建议, 和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

相关内容