![为什么 Ctrl-Arrow 在 OS X 上的 bash 中不起作用?](https://linux22.com/image/1255316/%E4%B8%BA%E4%BB%80%E4%B9%88%20Ctrl-Arrow%20%E5%9C%A8%20OS%20X%20%E4%B8%8A%E7%9A%84%20bash%20%E4%B8%AD%E4%B8%8D%E8%B5%B7%E4%BD%9C%E7%94%A8%EF%BC%9F.png)
我在每个 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 Arrow或Ctrl-来找出实际的转义序列Right Arrow。以下是我自己按 Ctrl-Left Arrow 时的示例输出:
^[[1;5C
^[[1;5C
要翻译成行话,请用.inputrc
替换转义符号并将结果粘贴在双引号内。^[
\e