Alt-cをCtrl-uにマッピング

Alt-cをCtrl-uにマッピング

書いています~/.bashrc文書。
Alt-cをCtrl-uにバインドしたいです。
だからAlt-cを押します。 Ctrl-u機能を実行する必要があります。
Ctrl-u は端末のテキストを消去します。今Alt-cを押す必要があります。

次のテキストがあります。

# Avoids default mapping.
# set bind-tty-special-chars off
# Solves error: 'bind editing not enabled.'
# But prevented me from using Control-p/n.
set -o vi; 
# Up Directory (Alt-j)
bind '"\ej": "cd ..;\r"';

Alt-jをコードに正常にバインドする「CD..;」
しかし、AltをCtrlマッピングにマッピングする方法がわかりません。

おそらく「と同じだろう。セット -o vi「しかし、バインディングエラーが発生しないと削除できません。また、設定を解除してください。」セット -o vi「ターミナルでもうタブを押すことができないという副作用があります。また、emacsとviのいずれかを選択するだけだそうです。だから、単に-o viに設定することができれば、将来のために考えます。わかりました。

set -o vi 以前は以下を試してみましたが、うまくいきません。

# Clear Text (Alt-c)
bind '"\ec": "Control-u:"';

でも構いません。
Alt-cをCtrl-uにマッピングする方法は?

答え1

bindreadline関数にキーバインディングを使用する必要があります。bind -p現在のバインディングをすべて一覧表示し、次のものを含める必要があります。

"\C-u": unix-line-discard

したがって、同じ機能を呼び出すには、次のようにします。

bind '"\ej":unix-line-discard'

答え2

Ctrl+コマンドと挿入モードでuウィジェットを呼び出す:unix-line-discardvi

bash-5.2$ set -o vi
bash-5.2$ bind -pm vi-command | grep -iw c-u
"\C-u": unix-line-discard
bash-5.2$ bind -pm vi-insert | grep -iw c-u
"\C-u": unix-line-discard

+をバインドする同じウィジェットを呼び出すことで、Alt同じことを行うことができます。c

bind -m vi-command '"\ec": unix-line-discard'
bind -m vi-insert  '"\ec": unix-line-discard'

または文字に翻訳する^U

bind -m vi-command '"\ec": "\C-u"'
bind -m vi-insert  '"\ec": "\C-u"'

関連情報