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


18

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

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

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


私はここで答えを見つけました< unix.stackexchange.com/questions/27699/remap-bash-vi-keys >
-DinizBr

回答:


17

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

探しているキーはと呼ばれvi-movement-mode、デフォルトは\e(エスケープ)です。さらに、このように等しい(これはかなりばかげている)にバインドできます。2行目は、エスケープするバインディングを取り除きます。

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

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

あなたは置くことができbind、あなたのコマンドを.bashrc、またはあなたが編集することができ~/.inputrc、それはあなたが実行するすべてのreadlineのプログラムに適用するために。readlineドキュメントには完全な詳細が含まれています。


1
これはすごい。本当にありがとう。キーコンボをどのようにバインドするかを理解できましたbind "Control-Space":vi-movement-mode-それはうまくいきます。しかし、たとえばvimでは、にトリガーとして2文字を続けて入力します。escつまり、入力jjすると通常モードに戻ります。bindで試したとき、これは機能しませんでしたが、機能させるための特別な方法はありますか?
ヨナ

@Jonahオフハンドを知っているわけではありませんが、最近readlineのドキュメントを熟読していません
...-derobert

@chishaku、ジョナの名前の前にアットマーク(@)を付ける必要があります。そうしないと、ジョナは通知を受け取りません。
デロバート14年

2
@ジョナ私は同じことをやろうとしました。これを理解したことがありますか?
着尺14年

1
unix.stackexchange.com/questions/303282/…何らかの理由で引用が必要ですbind '"jk":vi-movement-mode'
Hielke Walinga
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.