viシェルモードのカスタムキーバインディング(例: "set -o vi")?

viシェルモードのカスタムキーバインディング(例: "set -o vi")?

私はちょうどこの奇跡を発見し、set -o viこのviシェルモードをviやvimと同じようにカスタマイズできるかどうか疑問に思います。

たとえば、より便利なキーやキーの組み合わせをesc

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

答え1

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

探しているキー名vi-movement-mode、デフォルトは\e(escape)です。また、これを次のように(やや愚かなことですが)同じようにバインドすることもできます。 2行目はエスケープされたバインディングを削除します。

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

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

bindコマンドをあなたのコマンドに入れたり実行したりするすべてのreadlineプログラムで動作するように.bashrc編集できます。~/.inputrcreadline ドキュメントには詳細が含まれています。

関連情報