我如何绑定C-?在bash?

时间:2014-08-12 19:23:00

标签: linux bash shell zsh

我想在bash和/或zsh中将C-?绑定到history-search-backward。我尝试了以下方式

bind '"^?": history-search-backward' # bash
bindkey '^?' history-search-backward # zsh

绑定工作正常,但同时BS(退格)停止正常工作。原因是BS生成与C-?相同的代码,可以使用C-v BSC-v C-?进行检查。因此,最终结果是C-?BS都与历史搜索 - 向后结合,这显然不是我想要的。

所以问题是我如何正确绑定C-?而不影响BS

1 个答案:

答案 0 :(得分:0)

终端确定按键或键组合时向shell发送的字符串。

按下退格键时,默认情况下,很多(大多数?)终端仿真器默认发送^?(ASCII 0x7f,删除)。而实际的退格字符是^H(ASCII 0x08,Backspace)。

如果您可以更改终端模拟器的行为以发送^H,您应该能够维护退格键的功能,同时仍然能够将^?绑定到其他位置。

终端模拟器为配置提供GUI(gnome-terminalroxtermkonsole,...)应该有一个选项。

其他人(xtermurxvt,...)可能拥有可在~/.Xdefaults中设置的相应X资源(或 - 取决于您的发布内容 - ~/.Xresources) 。

对于xterm,您需要设置:

XTerm.backarrowKeyIsErase: False

urxvt设置

URxvt.backspacekey: ^H

请注意,这是实际的^H(ASCII 0x08)字符,而不是由^H组成的双字符字符串。

要加载这些设置,请致电xrdb -merge ~/.Xdefaults或关闭并重新启动X会话。 (仅为新终端启用设置)