为什么 Ctrl-Arrow 在 OS X 上的 bash 中不起作用?

为什么 Ctrl-Arrow 在 OS X 上的 bash 中不起作用?

我在每个 Linux 系统上都使用Ctrl-Ctrl- ,但这些组合键在我的 Macbook Pro 上的 bash 中不起作用。它运行的是 Snow Leopard,我使用的是内置的终端应用程序。

组合键似乎没有被任何终端捕获,因为如果我 ssh 到我的一个 Linux 服务器,我可以使用Ctrl- /跳转到命令行上的下一个/上一个单词。但是,当我在 Macbook 上的 bash 中尝试此组合键时,我只得到“C”表示右箭头,“D”表示左箭头。

关于如何让这些键在 darwin bash 中发挥作用,您有什么想法吗?

答案1

OS X 默认使用 emacs 键绑定。这几乎适用于 OS X 上的每个应用程序,这相当不错。这意味着 Ca 和 Ce 等内容是行首/行末。您还可以使用 M-backspace 巧妙地删除后退单词,哦,还有使用 Ck 删除行。

这应该意味着在您的终端中,前进/后退单词分别绑定到 Mf 和 Mb(M = Meta = alt/option),但事实并非如此。在 OS X 上,前进/后退单词默认绑定到 M-→ 和 M-←。

您可以通过更改 GNU Readline 库为您的帐户配置的方式改变此行为。这发生在您的文件中。您可以使用以及在线文档~/.inputrc获取可绑定命令的大型列表,例如man readline这里。

因此,要回答您的问题,您需要重新映射 Readline 在看到 C-→ 和 C-← 时所执行的操作,以执行它在您的 Linux 服务器上所执行的操作。

~/.inputrc对于您想要执行的操作,文件的语法非常简单: key-sequence: action

这应该是您获得所需行为所需要的:

"\e[5C": forward-word
"\e[5D": backward-word

这是另一页带有附加有用的绑定。

(您可能只需将 /etc/inputrc 从您的 Linux 机器复制到您的 OS X ~/.inputrc 即可)

答案2

2020 年 1 月更新

在最新版本的 OSX 上,默认 shell 是zsh。因此,让 ctrl-arrowleft 和 ctrl-arrowright 正常工作的咒语如下:

bindkey '^[[1;5D' backward-word
bindkey '^[[1;5C' forward-word

(将其放入你的.zshrc

答案3

输入~/.inputrc以下几行:

"\e[5C": forward-word
"\e[5D": backward-word

答案4

这些天来,终端中输出的转义序列似乎已经发生了变化。以下是截至今天(2018 年底)对我有用的Ctrl方法:Arrows

"\e[1;5C": forward-word
"\e[1;5D": backward-word

cat -v注意:你始终可以通过在终端中键入并按Ctrl-Left ArrowCtrl-来找出实际的转义序列Right Arrow。以下是我自己按 Ctrl-Left Arrow 时的示例输出:

^[[1;5C
^[[1;5C

要翻译成行话,请用.inputrc替换转义符号并将结果粘贴在双引号内。^[\e

相关内容