我的主机托管商最近更新到了新的 CentOS,并且我一直在对其进行“个性化”,但现在我遗漏了一些东西。
在我家的 Ubuntu Server 上,我可以使用forward-word
+ / 。我没有为此做任何事情。我也可以使用+删除一个单词。backward-word
ALTRIGHTLEFTALTBACKSPACE
在我的新 CentOS 上,我可以按ALT+ BACKSPACE,但无法使用ALT+ RIGHT/ LEFT!ALT+ B/可以F工作,但这是不可接受的,因为它只适用于左侧ALT,而我的手指没有那么瘦。(右ALT+ B/F只打印“b”或“f”)
我尝试将 /etc/inputrc 的一部分复制到 CentOS,但没有任何作用。
ALT或者CTRL,我不在乎,但我确实需要一个快捷方式。上一个 CentOS 没有它,但自从 Ubuntu 以来,我在 CentOS 上一直很想念它。
我的 CentOS /etc/inputrc
:
"\e[5C": forward-word
"\e[5D": backward-word
"\e[1;5C": forward-word
"\e[1;5D": backward-word
我的 Ubuntu /etc/inputrc
:
"\e[1;5C": forward-word
"\e[1;5D": backward-word
"\e[5C": forward-word
"\e[5D": backward-word
"\e\e[C": forward-word
"\e\e[D": backward-word
我甚至不知道它们都是什么意思!?什么是[1;5C
key??
答案1
感谢您的提问,我终于读了一些书,增加了我的理解,干杯!
因此,一个很好的信息来源是man readline
。各个inputrc
文件中指定的键绑定控制着 BASH readline 库的工作方式。根据 readline 手册页,您可以使用符号键名或转义序列:
Key Bindings
The syntax for controlling key bindings in the inputrc file is
simple. All that is required is the name of the command or
the text of a macro and a key sequence to which it should be
bound. The name may be specified in one of two ways: as a sym‐
bolic key name, possibly with Meta- or Control- prefixes, or
as a key sequence. The name and key sequence are separated by
a colon. There can be no whitespace between the name and the
colon.
When using the form keyname:function-name or macro, keyname is
the name of a key spelled out in English. For example:
Control-u: universal-argument
Meta-Rubout: backward-kill-word
Control-o: "> output"
手册页还指出了默认配置文件,~/.inputrc
因此我建议将绑定放在那里。
如果你想使用普通字母键(例如Control- g),Control-g: forward-word
效果很好。箭头键比较难。我试过,但没能找到这个键姓名箭头键。我试过的所有键(left-arrow
、left
、:left
)都不起作用,所以看起来我们只能使用转义序列了。
不幸的是,确切的转义序列在终端仿真器之间有所不同(这就是您的 Ubuntu inputrc 有多行的原因)。要找出您最喜欢的终端使用的转义序列,请运行read
,然后输入您感兴趣的按键序列。在terminator
、xterm
和gnome-terminal
、Control-中Left给出:
$ read
^[[1;5D
在aterm
:
$ read
^[Od <-- that is a capital O not a zero (0).
通过一些实验,我发现是^[[D
和Left是^[[1;5D
- Control。Left第一个^[
是Esc关键,我想在这里用来表示转义序列。
无论如何,为了以一种适用于所有人的方式绑定- ,我将以下几行添加到我Control的:Leftforward-word
~/inputrc
"\e[1;5D": backward-word
"\eOd": backward-word
Control由于我还没有完全理解的原因\e
,应该是Esc。
~/.inputrc
适用于上面列出的所有终端的最终文件是:
"\e[1;5D": backward-word
"\eOd": backward-word
"\e[1;5C": forward-word
"\eOc": forward-word
答案2
如何在 Iterm2 中执行此操作,以便它在您连接到任何主机时能够工作。
注意:我写这篇文章只是因为另一个问题(https://superuser.com/questions/1042937/getting-ctrlarrows-to-move-word-at-a-time-on-newest-iterm2?rq=1) 已将此问题链接为重复,但该问题并未回答如何在 Iterm2 中执行此操作,因此它实际上并不是重复。
如果您使用的是 OS X 并使用 Iterm2,则可以将Alt/ Ctrl+→ (right arrow)和Alt/ Ctrl+映射←到标准 readline 命令Meta+F和Meta+ B。在下面的示例中,假设 Esc 键是 meta。为此,请打开 Iterm2。
- 点击:菜单 -> 首选项...
- 单击“配置文件”选项卡。
- 单击您的个人资料或默认个人资料。
- 单击“密钥”子选项卡。
- 单击“加载预设…”旁边的“+”加号
- 在第一个字段中输入键盘快捷键(例如Ctrl+ →)
- 选择“发送文本”、“发送十六进制”(有关发送十六进制的更多信息,请参阅下面的“如何将按键序列绑定到控制键”)或“发送转义序列”。在本例中,我们使用“发送转义序列”。
- 在最后一个字段中选择 readline 可以解释的字符。
^[
是退出的 readline 序列。此条目将Opt+映射→到Esc+ F(在其他终端中可能是Alt+ )F
如何将快捷方式映射到非转义序列(Ctrl、、等)AltCmd
- 从应用商店下载“Key Codes”。安装并打开。
- 在打开的“键代码”窗口中,按Ctrl+ [some key],在本例中,我将使用Ctrl+W删除 readline 中的前一个单词。
- 注意“Unicode”字段。
- 现在使用 iterm、preferences->Keys->+(上面提供的序列)映射您的键序列。
- 在这种情况下,输入“键盘快捷键”字段,例如Opt+ Backspace。
- 将“操作”更改为“发送十六进制代码”。
- 在最后一个字段中输入之前记下的十六进制;在本例中为
23
/0x17
。 - 单击“确定”后,快捷方式现在应该可以在您的终端窗口运行,并且可以在任何有 readline 的系统上运行。
答案3
感谢您的提问。在 CentOS 7 上使用 PuTTY 时遇到了这个问题,通过在$if mode=emacs
条件中添加以下内容解决了此问题:
# for PuTTY
"\e\e[C": forward-word
"\e\e[D": backward-word
激活设置与Ctrl+X然后Ctrl+R