インタラクティブに使用するときは、できるだけ多くの動作をzsh
シミュレートしたいと思います。最後にsh
追加しようとしましたが、次のようなzshプラグインを使用しているため(例:emulate sh
~/.zshrc
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プラグインに影響していることを示しています。残りの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