`set -o emacs`と`bindkey -e`の違いは何ですか?

`set -o emacs`と`bindkey -e`の違いは何ですか?

私が知っている限り、およびはエミュレートするためにターミナルラインエディタの動作を変更するために使用され、およびはset -o emacsキーバインディングをエミュレートするために使用されます。どちらも同じことをするようですので、両者の違いは何か、違いがあるのか​​知りたいです。bindkey -eemacsset -o vibindkey -vviset -obindkey

set -oほとんどのシェルで動作してbindkeyいるようですが、zle特定のコマンドが1つあります。これが唯一の違いですか?また、同じキーをバインドするのですか、それとも別のタスクにset -oバインドされたいくつかのキーがありますか?bindkey

答え1

bindkey -v/-etcsh構文です(bindkey組み込み関数は1990年5.19PL2でtcshに追加されました)が、set -o vi/emacsksh構文です(kshが少なくとも1983年の初めにemacs / viモードを持っていたので、おそらくそれ以前のksh85にあったでしょう)。

zleの最初のバージョンは1991年zsh2.0に追加されましたbindkey(1.0より前のバージョンで借りたreadlinebash

zsh最初のバージョン1.0ではsetoptオプションを設定する必要がありました(csh/ Bourneのコマンドラインを介して渡されたオプションを除く)、while(t)cshbash特殊変数を使用する必要がありました。 2.0では、-o作業可能なオプション(インタプリタと組み込みオプション)が追加されました(このオプション自体は、1996年2.0の新しい組み込みオプションで設定されたオプションに特殊変数を変換しました。これはオプションとは別のオプションセットでした)。 1990年にサポートが追加されました。setkshbashshoptset -oset -o

「オプションvi」はemacsそうではありません。2003年以前にzshに追加されましたしかし、バージョン4.1.1では。オプションを設定するとモードemacsが無効になるため、「オプション」パラダイムはこの状況には適していませんvi

zsh -o emacs現在、zsh -o vizshの起動に関する報告が正しく機能していないことがわかりますzsh: invalid module name `zsh/zle'(a抜け穴)。

ほとんどのシェルはまた、行zsh編集モードをユーザーのエディター設定に一致させようとし、環境変数の値に基づいてデフォルト編集モードを選択します。$EDITOR$VISUAL

関連情報