我希望在〜/ .inputrc中为\ C-m设置自定义绑定。但是,在我更换它的那一刻,我再也无法输入任何命令了。如,
"\C-m": vi-forward-word
问题似乎是存在默认绑定
"\C-m": accept-line
这本身不是问题,但似乎其他程序(终端?)发送^ M(Ctrl-m)来表示回车。在我的设置中我有urxvt,但我也试过xterm,行为是一样的(一旦我在inputrc的末尾添加" \ C-m" vi-forward-word绑定,返回不再有效)
现在我希望这个改变了,我愿意修补所涉及的任何程序/库。我的问题是:我应该在哪里寻找相关的作品?我检查了readline源代码,但找不到任何指示\ C-m在内部重用的内容。类似地,我检查了urxvt,但我找不到任何映射回车到代码中的\ C-m的东西(这是我最好的猜测导致这种行为的原因)。有趣的是,rxvt.7.pod包含
KP_Enter ^M ESC O M
和rxvt-unicode.termcap with
...:cr=^M:...
但是,这两个文件似乎主要是文档或至少没有安装。我对terminfo文件及其在整个终端工作中的参与的了解有限。 readline和终端之间的交互也是如此(在我的例子中,在urxvt之前调用readline?)。所以,如果有人指出要去哪里看,我将不胜感激。
暂且不说:我添加的那一刻
"\r": accept-line
之后" \ C-m"绑定我回到原来的行为(即返回工作)。如果我在" \ C-m"之前添加该行。返回仍然没有按预期工作。
干杯!
DESO
答案 0 :(得分:0)
"\r"
,"\C-m"
,"C-M"
,^M
都是相同的字符:ASCII CR(回车),通常回车符映射到换行符(ASCII LF 换行)。当然,这种行为是由readline承担的。
使用readline库的应用程序原则上可以抑制映射,但是只有.inputrc
文件和shell才能完成很少的事情。
该行
KP_Enter ^M ESC O M
与此无关:它指的是数字小键盘上的 Enter 键,而不是主键盘上的 Enter 键。