zshシェルの開始と行の終わりのバインディングが壊れる原因をどのように知っていますか?

zshシェルの開始と行の終わりのバインディングが壊れる原因をどのように知っていますか?

私はmacOS / darwinで「デフォルト」のzsh環境を使用しています(「oh-my-zsh」などは使用しません)。

インストールしたばかりの開発ツールは、私が定期的に使用しているいくつかのキーバインディング(emacsスタイルのcontrol-aとcontrol-e「行の始まり」と「行の終わり」カーソルの移動)を破ったようです。 control-a と入力すると、^Aトークンがプロンプトに挿入されます。システムのマイユーザーアカウントのみが影響を受けます。キーボードショートカットは追加の設定なしで機能するため、同じシステムの新しいユーザーアカウントは影響を受けません。

影響を受ける環境と影響を受けない環境を比較すると、結果がbindkey異なります。内部にうまくいく環境ではbindkey49行を出力しますが、影響を受けなかった環境ではbindkey120ラインを出力します。私の考えでは、これは問題の原因は明らかですが、根本的な原因ではありません。

追加の調査:影響を受けたシェルから$ bindkey -lL次を返します。

bindkey -N command
bindkey -N emacs
bindkey -N isearch
bindkey -A viins main
bindkey -N vicmd
bindkey -N viins
bindkey -N viopp
bindkey -N visual

影響を受けないシェルでは、ライン4が次のようになることを除いて同じです。

bindkey -A emacs main

これは私が見ている動作に意味があるようです。私が期待していたemacsスタイルのバインディングは、他のスタイルバインディングに置き換えられました。

私はまだバインドキーがどのように動作するかわからないので、システムのどこかに確認できる状態があるのか​​、それともシェル初期化ファイルのためにこのようなことが起こるのか疑問に思います。後者は、私のユーザープロファイルにあるシェルのコンテキストだけを知って影響を与え、すでにこれに対する制御権を持っていると信じているので、混乱する可能性があり~/.zshenvます~/.zshrc。 (シェルのロード時にインポートされたすべての初期化ファイルを一覧表示する方法はありますか?)

最終的に問題を引き起こす原因が何であるかを知り、私がインストールした開発者ツールにバグレポートを提出できるようにしたいと思います。

答え1

bindkey -A … mainmainキーマップとは何かを定義します。これmain キーマップ行の編集を開始するたびにエディタで使用されます。したがって、変更された点は主キーマップです。デフォルトでは、zshはEmacs編集モードではなくVi編集モードにデフォルト設定されますviinsemacs

あなたが上書きしない限り.zshrc、zshは、あなたが好むエディタがViであると思われる場合はデフォルトでVi編集モードに設定され、そうでなければEmacs編集モードに設定されます。より正確には、「あなたのお気に入りのエディタがViのようです」は次のように定義されています。

VISUAL環境変数の1つに「」EDITOR文字列が含まれている場合vi

今何かがこれらの変数の1つまたは両方を設定しているようです。この問題を解決するには:

  • 名前付きエディタをviデフォルトエディタとして使用するにはbindkey -e(またはbindkey -A emacs main)を追加して、.zshrczshの考えに関係なくzshのEmacs編集モードを好むようにzshに指示します。
  • デフォルトエディタが必要ない場合は、環境変数が設定されている場所を見つけてこの設定を削除してください。

答え2

mainインストールしたツールがキーマップをから(を実行して)emacsに変更したようです。デフォルトに戻すには、次の手順を実行します。viinsbindkey -vmainemacs

bindkey -e

バラより

関連情報