我在阅读Linux手册时发现,它说我可以在编辑时使用control + left和control + right在终端中前后移动单词。


Ctrl加向左或向右箭头键一次可向后或向前移动单词,与按Esc键然后按B或F一样。”


在OS X上,control+leftcontrol+right通常控制空格。我已经禁用了那些。我还尝试使用首选项窗格来设置键盘快捷键:





但是这不起作用并导致此错误:



此外,如果我在iTerm中并使用alt+escape,则字符B或F来回移动。这是在我的任何配置更改之前发生的。但是我真的很想能够使用Control +箭头键。

评论

顺便说一句,实现此目的的更简化的方法可能只是映射command + left和command + right,而不是ctrl + left和ctrl + right。我不需要在系统范围内禁用任何功能即可完成此操作。

#1 楼

bash

只需将以下内容添加到~/.inputrc中:

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


有关更多说明,请参见此归档的Wiki帖子。如果要使用alt键来移动单词(例如默认的OS X行为),请使用:

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


zsh

默认情况下,zsh不使用readline库,因此不会读取~/.inputrc。要获得相同的功能,可以在~/.zshrc中添加以下内容-再次使用alt键:

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


有关内置的​​更多信息,请参阅此文档。 zsh行编辑器(zle)。为什么?您已经设置了配置文件以使用Xterm默认值:



这就是为什么您需要“捕获”此序列并告诉readline该怎么做的原因。


如果上述方法仍然无效,并且您使用的是OS X 10.9(Mavericks)或类似版本,则可能需要禁用全局Mission Control快捷键,以防止使用Control +箭头键即使已禁用任务控制本身,也无法访问iTerm。您可以从“系统偏好设置”→“键盘”→“快捷方式”→“任务控制”中进行操作:



评论


我尝试按照说明进行操作,以使alt +左​​键和alt +右键起作用。我将这两行添加到我的.inputrc文件中,但是当我按下键时发生的唯一事情是将“ D”或“ C”打印到外壳上。我将iTerm2与zsh shell一起使用。有任何想法吗?

– Flo
2012年11月27日11:23



@Flo尝试在您的〜/ .zshrc中添加以下行:bindkey -e,bindkey'^ [[1; 9C'前向词和bindkey'^ [[1; 9D'后向词”。 IIRC zsh不会读取.inputrc –至少它对我有用。

–slhck
2012年11月27日上午11:49

不适用于ctrl-left / right + bash,但如果我将其设置为alt-left / right,则效果很好。

–大林
2014年1月18日,下午3:22

添加了有关“任务控制”快捷方式的编辑,以防止其中任何一种以最不透明的方式工作。希望它可以使某人免于经历我刚做的同样的事情...

–rubyruy
2014年1月22日在18:22

对于OSX + zsh + iTerm2 + ctrl-left / right,请使用以下命令:bindkey -e; bindkey'\ e \ e [C'前向字; bindkey'\ e \ e [D'向后单词

– Artur Bodera
2014年4月11日9:30



#2 楼

zsh的工作解决方案。简单,直接,开箱即用。


转到:
⌘, Preferences → Profiles → Keys → Keyboard Behavior


负载预设:Natural Text Editing




评论


感谢@Happy Torturer,我相信这是最好的答案,主要是因为我在Terminal.app上没有这个问题,所以我不想修改bash / zsh,只想在Terminal.app中工作。

–galuszkak
17年9月23日在17:07

这个这个这个非常感谢您提供此解决方案!我购买的每台Mac电脑都经历了这个令人费解的过程。我现在知道实现此目标的最简单方法。谢谢!

–vernonk
17年11月22日在4:55

这应该是公认的答案。我想知道,有什么方法可以通过命令行而不是通过设置GUI加载此预设吗?

–卡西米尔
19/12/16在9:20

#3 楼

我是这样修复的:

在顶部菜单中;转到

Profiles 
-> Open profiles... 
-> Edit profiles... (button) 
-> Keys (tab) 
-> Load Preset... (dropdown) 
->  Choose "Natural text editing". Done! :-)


评论


我在该预设下拥有的全部是“出厂默认值”

– MaylorTaylor
18 Sep 10'在2:29

#4 楼

我使用了不同的方法。使用BetterTouchTool,我为iTerm2编写了自定义键盘快捷键。当我在iTerm2中按alt-left时,它将发送键盘快捷键ctrl-left并带有“将键盘快捷键发送到特定应用程序”操作。该应用程序是iTerm2。我对映射到ctrl-right的alt-right做了同样的操作。

效果是,在iTerm中按alt-left或alt-right会将ctrl-left或ctrl-right直接发送到iTerm2,绕过在系统范围内常用的向左或向右移动桌面的快捷方式。像这样,我在本地终端会话上以及远程SSH会话上都在iTerm2中获得了典型的mac行为,并且可以使用标准ctrl-left / ctrl-right移至不同的桌面。我在这里写的:

http://www.callum-macdonald.com/2013/04/17/ctrl-left-and-ctrl-right-on-iterm2/

评论


BetterTouchTool不是开源的,很可能会做您不希望的事情。那个家伙说他是一个学生,但他也可以成为三封信的代理。

–撤离
16年1月4日在17:43

#5 楼

实际上,我发现最简单的解决方案是转到个人资料设置(在“个人资料/密钥”中找到),删除有问题的个人资料快捷方式(因为个人资料会覆盖iTerm中的全局),在我的情况下为alt + left和alt + right,然后是全局

此外,如果您使用的是OS X,则最好坚持使用系统级的快捷方式,即为此目的使用alt + left和alt + right代替终端中的行为最终必定会引起痛苦。

除了chmac的使用Better Touch Tool的解决方案是仅在iterm中更改control + arrow行为的一种优雅方法。

评论


实际上,这是最好的解决方案。这很令人困惑,因为我们大多数人都进入“密钥”选项卡。相反,我们必须转到“个人资料”标签->个人资料(例如默认)->键。

– Paschalis
15年11月3日,17:26

这绝对是最安全,最简单的解决方案。

–撤离
16年1月4日在19:14

#6 楼

这篇文章以⌥←Delete删除一个单词的方式教了这和其他快捷方式:

http://elweb.co/making-iterm-2-work-with-normal-mac-osx-keyboard-快捷方式/

评论


这实际上并不能回答有关使用 的问题

–DavidPostill♦
16年2月2日在15:38

您所要做的就是使用适合您需求的快捷方式。 “ ”或任何您想要的。

– Seralto
16年6月2日,16:05

因此,请从参考链接中引用答案的关键部分,因为如果链接页面发生更改,答案可能会失效。

–DavidPostill♦
16年6月2日在16:12

#7 楼

您需要进入Profiles选项卡并删除alt + left和alt + right的映射,因为默认情况下它将输出一些十六进制值。

评论


这为我做到了!

–菲利普
16年5月26日在17:52