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


15

我在使用的每个Linux系统上使用Ctrl- Ctrl- ,但是这些键组合在Macbook Pro上无法正常使用。它正在运行Snow Leopard,并且我正在使用内置的Terminal应用程序。

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

关于如何使这些密钥在darwin bash中工作的任何想法?


2
如果使用空格,则默认情况下Ctrl +箭头可切换空格。
mark4o 2010年

Answers:


13

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)


注意:如果您经常将tmux与xterm-keys一起使用,则还需要\e[1;5C并且\e[1;5D触发forward-wordbackward-word
Arne 2014年

2
另一个注意事项:如果仍然无法使用,则可能是由于与任务控制/空间的快捷方式冲突。系统偏好设置->键盘->快捷方式->任务控制,向左/向右移动一个空格
bhh1988

我不明白“ OS X默认使用emacs密钥绑定。” “ Ctrl-箭头”也是emacs键绑定。
格雷格

3

输入~/.inputrc以下内容:

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

0

这些天来,似乎Ctrl-Arrows在终端中输出的转义顺序已经改变。截止到今天(2018年底),这对我有用:

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

注意:您始终可以通过cat -v在终端中键入并按Ctrl-左箭头或Ctrl-右箭头来找出实际的转义序列。这是我自己的Ctrl-左箭头的示例输出:

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

翻译成.inputrc行话来说,更换逃生标志^[\e和坚持双引号中的结果。


0

如@ bhh1988所述,任务控制配置阻止Ctrl-Key与中的箭头键一起使用bash。我不想干扰这些快捷方式,所以我改用Option(即Alt)键。当前在Mojave上使用德语键盘(不知道这是否相关),我将以下内容.inputrc用于使用Option-left-arrow和Option-right-arrow在单词之间移动。

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

0

2020年1月更新

在最新版本的OSX中,默认外壳为zsh。因此,使ctrl-arrowleft和ctrl-arrowright正常工作的魔咒如下:

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

(将其放入您的.zshrc

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.