Readline .inputrc 每行重置为默认值

Readline .inputrc 每行重置为默认值

我正在尝试在 bash 命令行上重新映射键。我有一个 .inputrc 文件,我已将其简化为:

"\C-w": forward-word

还有其他设置,但为了问题清晰起见,我已将它们减少到一个。

发生的情况是,在 shell 中的每一新行上,Cw 都会重置为其默认绑定unix-word-rubout.当我编辑该行时,我可以使用 Cx Cr 重新加载 .inputrc 文件,并且 Cw 执行我分配给它的操作forward-word。然后在 bash 的下一行,它再次重置unix-word-rubout

如果我跑

> bind -P | grep C-w

我明白了

unix-word-rubout can be found on "\C-w".

但如果我跑

> bind -P | grep C-w 

然后在我按回车之前用 Cx Cr 重新加载 .inputrc ,我得到

forward-word can be found on "\C-w", "\ef".

所以我可以很好地加载 .inputrc 并且 bash 甚至会承认它。但它会在每个新行上重新加载默认设置。

JLine,Java Readline 克隆按照预期使用我的 .inputrc 没有任何问题。

我在 OS/X Yosemite 上运行 bash。我正在运行 Homebrew 4.4.12 版本,但 Apple 3.2.57 版本(从 2007 年开始)的工作原理完全相同。它在 Terminal.app 和 iTerm2 中的工作方式相同。

我希望我的设置适用于每一行。我怎样才能让他们坚持下去?

答案1

问题是串行通信也定义了一些键。
使用:

$ stty -a
speed 38400 baud; … …
swtch = <undef>; start = ^Q; stop = ^S; … … werase = ^W; …
-parenb …

在那里(取决于您的系统设置)您应该看到:

werase = ^W

这就是 word-rubout 作为 key 的 stty 定义ctrl W

只需执行:

stty werase undef

undef由控制器制作这样的钥匙ssty
请小心您选择进行的更改,因为这可能会使您的终端无法使用。

readline然后该密钥将可以由bash shell 使用的系统重新分配。

要使更改 ( stty werase undef) 持续存在,您可以将其放入/etc/profilefor全部使用该文件的 shell(几乎所有)。适用/etc/bash.bashrc于所有 bash shell 或适用~/.bashrc于“此用户”交互式 shell。

相关内容