在 CentOS 命令行上启用 alt/ctrl + 左/右

在 CentOS 命令行上启用 alt/ctrl + 左/右

我的主机托管商最近更新到了新的 CentOS,并且我一直在对其进行“个性化”,但现在我遗漏了一些东西。

在我家的 Ubuntu Server 上,我可以使用forward-word+ / 。我没有为此做任何事情。我也可以使用+删除一个单词。backward-wordALTRIGHTLEFTALTBACKSPACE

在我的新 CentOS 上,我可以按ALT+ BACKSPACE,但无法使用ALT+ RIGHT/ LEFTALT+ 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;5Ckey??

答案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-arrowleft:left)都不起作用,所以看起来我们只能使用转义序列了。

不幸的是,确切的转义序列在终端仿真器之间有所不同(这就是您的 Ubuntu inputrc 有多行的原因)。要找出您最喜欢的终端使用的转义序列,请运行read,然后输入您感兴趣的按键序列。在terminatorxtermgnome-terminalControl-中Left给出:

$ read
^[[1;5D

aterm

$ read
^[Od    <-- that is a capital O not a zero (0).

通过一些实验,我发现是^[[DLeft^[[1;5D- ControlLeft第一个^[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+FMeta+ B。在下面的示例中,假设 Esc 键是 meta。为此,请打开 Iterm2。

  1. 点击:菜单 -> 首选项...
  2. 单击“配置文件”选项卡。
  3. 单击您的个人资料或默认个人资料。
  4. 单击“密钥”子选项卡。
  5. 单击“加载预设…”旁边的“+”加号
  6. 在第一个字段中输入键盘快捷键(例如Ctrl+
  7. 选择“发送文本”、“发送十六进制”(有关发送十六进制的更多信息,请参阅下面的“如何将按键序列绑定到控制键”)或“发送转义序列”。在本例中,我们使用“发送转义序列”。
  8. 在最后一个字段中选择 readline 可以解释的字符。
  9. ^[是退出的 readline 序列。此条目将Opt+映射Esc+ F(在其他终端中可能是Alt+ )F

键映射窗口示例

如何将快捷方式映射到非转义序列(Ctrl、、等)AltCmd

  1. 从应用商店下载“Key Codes”。安装并打开。
  2. 在打开的“键代码”窗口中,按Ctrl+ [some key],在本例中,我将使用Ctrl+W删除 readline 中的前一个单词。
  3. 注意“Unicode”字段。
  4. 现在使用 iterm、preferences->Keys->+(上面提供的序列)映射您的键序列。
  5. 在这种情况下,输入“键盘快捷键”字段,例如Opt+ Backspace
  6. 将“操作”更改为“发送十六进制代码”。
  7. 在最后一个字段中输入之前记下的十六进制;在本例中为23/ 0x17
  8. 单击“确定”后,快捷方式现在应该可以在您的终端窗口运行,并且可以在任何有 readline 的系统上运行。

答案3

感谢您的提问。在 CentOS 7 上使用 PuTTY 时遇到了这个问题,通过在$if mode=emacs条件中添加以下内容解决了此问题:

# for PuTTY
"\e\e[C": forward-word
"\e\e[D": backward-word

激活设置Ctrl+X然后Ctrl+R

相关内容