我想做的是让 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
。
更准确地说,如果您的终端配置告诉应用程序情况确实如此。这是erase
stty 设置中的字符。您可以通过运行来显示 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":'