vi シェル モードのカスタム キー バインディング、つまり「set -o vi」?

vi シェル モードのカスタム キー バインディング、つまり「set -o vi」?

私は の素晴らしさを発見したばかりですがset -o vi、vi や vim をカスタマイズするのと同じ方法でこの vi シェル モードをカスタマイズできるかどうか興味があります。

たとえば、より便利なキーまたはキーの組み合わせをesc?にマップするカスタム キー バインディングを作成します。

現在サポートされていない場合、プログラムのソース コードを変更してカスタマイズをハードコードすることはどの程度難しいでしょうか。それとも、それは悪い考えでしょうか。

答え1

はい、組み込み機能を使用してキー マッピング (vi モードまたは emacs のようなモードのいずれか) を変更できますbind。これは実際には readline の機能です (したがって、bash だけでなく、すべての readline プログラムで vi のようなバインディングを使用できます)。

探しているキーは と呼ばれvi-movement-mode、デフォルトは\e(escape) です。さらに、次のように (かなり馬鹿げた話ですが) 等号にバインドすることもできます。2 行目は escape へのバインドを削除します。

$ bind "=":vi-movement-mode 
$ bind -r "\e"

実行すると、bind -pバインドできるすべてのキーと、それらの現在のバインド(ある場合)が表示されます。

bindにコマンドを入力する.bashrcことも、~/.inputrc実行するすべての readline プログラムに適用するように編集することもできます。readline のドキュメントに詳細がすべて記載されています。

関連情報