自动关闭GNU Readline

时间:2012-07-14 19:25:18

标签: libreadline

使用各种基于GNU Readline的CLI,它会非常有用 如果有方法有括号和引号,请加快速度 键入时自动关闭。

因此,实际上在Bash(或其他CLI)上键入'( 附加结束引号或括号''()并放置光标 在写作之间。

我已经环顾了一段时间试图找出任何相关内容 (例如~/.inputrc设置),但没有找到任何东西,我想知道是不是 完全可以实现。任何意见将不胜感激。

2 个答案:

答案 0 :(得分:3)

这有点棘手,但可行。作为bash命令:

bind '"(" "\C-v()\e[D"'
bind '"\"" "\C-v\"\C-v\"\e[D"'

作为.inputrc中的设置(因此任何使用readline的程序都会获得此行为):

"(": "\C-v()\e[D"
"\"": "\C-v\"\C-v\"\e[D"

您可以使用Control-v为每个键添加前缀,以键入“普通”引号和左括号,而不会触发自动关闭行为。

以上假设是Emacs键绑定。对于vi绑定,请使用

bind '"(": "\C-v()\ei"'
bind '"\"" "\C-v\"\C-v\"\ei"'

"(": "\C-v()\ei"
 "\"": "\C-v\"\C-v\"\ei"

基本上,只需将[D替换为i;而不是发送转义序列以向左移动光标,只需在插入括号/引号后发送\e以回退到命令模式,然后重新进入插入模式,这应该将光标定位在刚刚键入的字符内。

答案 1 :(得分:0)

完全按照自己的意愿行事是不可能的,但有一个解决方法。 把它放在inputrc:

"\C-x\"": "\"\"C-b"

执行命令

info readline "comm" "readline init" "sample"

整个样本。