Alt-Left跳过单词在终端仿真器中不起作用


16

在上一份工作的Debian Wheezy机器上,我习惯了Alt + Left和Alt + Right来在活动命令行中的单词之间跳跃(以bash表示)。

但是,由于在家里,我已经升级到Jessie(Debian 8.0,测试分支),因此不再起作用:Alt-Left不会跳到上一个单词,而是打印类似D或的内容[D。OTOH,如果我打开ssh并连接到无头的Debian Wheezy,它的确运行良好。

此外,我刚刚在新工作中安装了Fedora 20,这里的行为是相同的。这适用于bash,csh和ksh(在下开始env -i),以及rxvt-unicode和xfce4-terminal,因此它必须在这些级别之外。

我应该在堆栈中的其他地方找到区别吗?


4
我建议尝试使用alt-b和alt-f(以及其余的readline键),因为它们更通用,并且许多命令行程序都支持readline绑定。
2014年

Answers:


21

您可能定义了在升级时丢失的本地~/.inputrc或全局/etc/inputrc文件。一个简单的解决方法是~/.inputrc使用以下几行来创建文件:

## enable Alt-arrows 
"\e[1;3D": backward-word ### Alt left
"\e[1;3C": forward-word ### Alt right

这些将与xterm和一起使用terminatorgnome-terminal但可能需要针对其他终端进行调整。不幸的是,每个终端仿真器都可以使用不同的语法。有关更多详细信息,请在此处查看我的答案。


我的意思是Alt,它仍然可以在远程计算机上使用。Rxvt中已经使用Ctrl +左/右来左右移动选项卡(Shift +左/右切换选项卡,而Shift +向下打开新选项卡)。
Alois Mahdal 2014年

1
顺便说一下,虽然Ctrl + Left / Right在GUI编辑器中很常见,但终端却是完全不同的世界,我还没有看到这种组合。
Alois Mahdal 2014年

10

terdon为我设定了正确的方向:inputrc文件。

罪魁祸首是,很不直观,readline6实际上使用〜/ .inputrc 而不是 / etc / inputrc,而readline(3)既不强调也不反对:

该文件的名称取自INPUTRC环境变量的值。如果未设置该变量,则默认值为〜/ .inputrc。如果该文件不存在或无法读取,则最终默认值为/ etc / inputrc。

因此,虽然在两台Debian机器上/ etc / inputrc与libreadline6软件包提供的版本相同(版本也相同),但是在较新的机器上〜/ .inputrc仅存在一行:set bell-style none。删除此文件后,一切正常(请参阅下面的注释)。

直到明天我才能检查Fedora,但是我想这是同样的问题。更新:在Fedora上,〜/ .inputrc不存在,这里的/ etc / inputrc完全不同,因此它可能没有定义。作为一个修复程序,我只是将Debian的inputrc保存为我的〜/ .inputrc。


笔记:

在7> 8升级期间如何更改它的奥秘仍未解决,但部分原因可以归因于我的记忆力不佳和一些无意中的点文件杂乱无章。(顺便说一句,这不是APT升级,而是重新安装和手动移动点文件,因此〜.inputrc可能以某种方式受阻。)

另外,当我说“确定”时,我的意思是说它可以在除Rxvt之外的所有地方使用Ctrl(确定,我只检查了xfce4-terminal,但我们知道Rxvt是通常的反叛者),在这里它被重新映射为Alt,这显然是因为Ctrl被Rxvt所采用特定功能-在列表中移动活动选项卡。

如联机帮助页所述,使用bash可以使用内置的bind命令来调查当前拥有的内容。


不错,+ 1。实际上,它比您想象的要直观。默认行为是特定于用户的点文件的优先级高于系统范围的默认值。否则,用户将无法更改其设置。
terdon

有关如何专门启用Alt +箭头的信息,请参见更新的答案。
terdon

2
这是正常现象,如果您也想阅读该文章$include /etc/inputrc~/.inputrc则需要放在顶部。
克里斯·唐纳

@terdon在系统范围内优先使用用户设置是很有意义的,但是我会更直观地看到〜/ .initrc将被“合并”到/ etc / initrc中(即/ etc / initrc将是$included默认情况下)。
Alois Mahdal 2014年

1
请参阅:1.硬编码选项,2。/ etc / initrc,3。〜/ .initrc --vs-- 1.硬编码选项2./etc/initrc或〜/ .initrc。第一种方法更加灵活,因为它可以轻松地扩展到较低的级别(例如,对于每个项目,我承认这个示例对于readline来说意义不大,但是您明白了)。
Alois Mahdal 2014年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.