解除 inputrc 中默认键的绑定

解除 inputrc 中默认键的绑定

我想做的是让 Ch 不发送向后删除字符

我的 inputrc 文件中没有任何内容,但显示在 bind -p 中

答案1

C-h默认情况下绑定到backward-delete-char。如果您不喜欢这样,请将其绑定到您的 中的其他命令.inputrc,例如

"\C-h": nop

让它什么也不做。

请注意,如果您的终端发送 Ch 作为BackSpace密钥 1,并且C-h未显式绑定到现有命令(因此不是nop),C-h则将执行backward-delete-char

准确地说,如果您的终端配置告诉应用程序情况确实如此。这是erasestty 设置中的字符。您可以通过运行来显示 stty 设置stty -a

答案2

绑定到nop将抑制按键操作,但如果您想将按键释放为前缀,则无济于事。例如,假设您想要将“Mc”用作一组相关宏的前缀,以便将序列“Mc Mi”绑定到仅键入长命令的宏controlct sensor instance。当然,“Mc Md”会打印其他内容,依此类推。

但有一个默认的绑定"\ec": capitalize-word",这会阻碍你。如果您足够快地打印按键序列“Mc Mi”(具体来说,在 readline 变量设置的毫秒时间内keyseq-timeout),您将获得所需的行为。但如果你犹豫的话,bash将单独执行“Mc”默认绑定,即命令nop。所以在这种情况下,你真的需要解绑关键,不是重新绑定它变成了什么都不做的东西。

幸运的是,readline 很容易支持这一点(@user996142 在评论中提供了正确的语法和参考):

"\ec":

独自在一条线上。这会清除绑定。

警告时间: 重新启动bash(例如,exec bash -l),而不仅仅是.inputrc使用“Cx Cr”重新加载文件。 readline 可能不会报告重新加载后的绑定 (bind -l不显示它,并bind -q capitalize-word高兴地报告“大写单词未绑定到任何键”,但仍然超时,就像绑定到 一样nop。这是 bash 的某些版本中的错误或阅读线。

答案3

我不得不使用以下方法解除绑定。对我来说难以捉摸的重要部分是添加周围的单引号。

FWIW,当直接在 shell 中运行命令时,有许多变体可以工作。但是,当在 .inputrc 或 .sh 文件中包含该命令时,这是我发现唯一有效的方法。

Alt-c

'"\ec":'

Ctrl-c

'"\C-c":'

以下-u <readline command name>似乎也有效有时

bind -u yank
bind '"\C-y":'  

相关内容