zshをインタラクティブに使用する場合にのみshエミュレーションモードを有効にする方法

zshをインタラクティブに使用する場合にのみshエミュレーションモードを有効にする方法

インタラクティブに使用するときは、できるだけ多くの動作をzshシミュレートしたいと思います。最後にsh追加しようとしましたが、次のようなzshプラグインを使用しているため(例:emulate sh~/.zshrcemulate zshvcs_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 shzshエミュレーションが必要なzshプラグインに影響していることを示しています。残りのzshに対してzshエミュレーションモードを維持しながら、ユーザーが対話的に入力したシェルコマンドに対してのみshエミュレーションモードを有効にする正しい方法は何ですか?

~/.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

関連情報