如何在 iTerm2 中获得 control+left arrow 返回一个单词?

cwd*_*cwd 137 mac keyboard-shortcuts iterm iterm2 macos

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

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

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

在此处输入图片说明

在此处输入图片说明

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

在此处输入图片说明

另外,如果我在 iTerm 中并使用alt+escapeB 或 F 字符来回移动。这是在我的任何配置更改之前发生的。但我真的很希望能够使用 control + 箭头键。

slh*_*hck 155

猛击

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

"\e[1;5D": backward-word
"\e[1;5C": forward-word
Run Code Online (Sandbox Code Playgroud)

有关更多解释,请参阅此存档的 Wiki 帖子。如果您想使用该alt键进行字对字移动(如默认的 OS X 行为),请使用:

"\e[1;9D": backward-word
"\e[1;9C": forward-word
Run Code Online (Sandbox Code Playgroud)

zsh

zsh 默认不使用readline库,因此不会读取~/.inputrc. 要获得相同的功能,您可以将以下内容添加到您~/.zshrc的使用中ctrl

bindkey -e
bindkey '\e\e[C' forward-word
bindkey '\e\e[D' backward-word 
Run Code Online (Sandbox Code Playgroud)

要使用alt密钥:

bindkey -e
bindkey '^[[1;9C' forward-word
bindkey '^[[1;9D' backward-word
Run Code Online (Sandbox Code Playgroud)

有关内置 zsh 行编辑器 (zle) 的更多信息,请参阅此文档


为什么是这样?您已将配置文件设置为使用 Xterm 默认值:

在此处输入图片说明

这就是为什么你需要“捕捉”这个序列并告诉readline你要做什么。


如果以上仍然不起作用并且您使用的是 OS X 10.9 (Mavericks) 或其他版本,您可能需要禁用全局 Mission Control 快捷方式,以防止 Control+箭头键到达 iTerm,即使 Mission Control 本身已被禁用。您可以从系统偏好设置这样做吗?键盘 ?捷径?任务控制

任务控制键盘首选项

  • 对于 OSX + zsh + iTerm2 + ctrl-left/right 使用以下命令:`bindkey -e; bindkey '\e\e[C' 前向字;bindkey '\e\e[D' 后向词` (12认同)
  • 我尝试按照说明让 alt + left 和 alt + right 键工作。我将这两行添加到我的 .inputrc 文件中,但是当我按下这些键时,唯一会发生的事情是“D”或“C”被打印到外壳上。我在 zsh shell 中使用 iTerm2。有任何想法吗? (4认同)
  • 添加了关于任务控制快捷方式的编辑,以防止其中任何一项以最不透明的方式工作。希望它可以让某人免于经历我刚刚做过的同样的事情 呃... (4认同)
  • @Flo尝试将行“bindkey -e”、“bindkey '^[[1;9C'forward-word”和“bindkey'^[[1;9D'backward-word”添加到“~/.zshrc”中。 IIRC zsh 不会读取 `.inputrc` – 或者至少它对我来说是这样的。 (2认同)
  • 使用 ctrl-left/right + bash 对我不起作用,但如果我将其设置为 alt-left/right,则效果很好。 (2认同)

小智 73

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

  1. 去: ?, Preferences ? Profiles ? Keys ? Keyboard Behavior

  2. 加载预设: Natural Text Editing

加载预设“自然文本编辑”

  • 谢谢@Happy Torturer,我相信这是最好的答案,主要是因为我在普通的 Terminal.app 上没有这个问题,所以我不想修改 bash/zsh,只想像在 Terminal.app 中一样工作。 (2认同)

ras*_*som 12

我是这样修复的:

在顶部菜单中;去

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

在此处输入图片说明

  • 我在该预设下的所有内容是“出厂默认值” (3认同)

chm*_*mac 7

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

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

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

  • BetterTouchTool 不是开源的,很可能正在做您希望它不是的事情。这家伙说他是一名学生,但他也可以成为一个三信机构。 (3认同)

小智 7

实际上,我发现最简单的解决方案是转到我的配置文件设置(在 Profiles/Keys 中找到),删除有问题的配置文件快捷方式(因为配置文件覆盖了 iTerm 中的全局),在我的情况下是 alt+left 和 alt+right,然后是全局快捷方式非常适合我!

此外,如果您使用的是 OS X,最好坚持使用系统范围的快捷方式,即为此目的使用 alt+left 和 alt+right,终端中的不同行为最终必然会导致痛苦。

除了 chmac 使用 Better Touch Tool 的解决方案之外,它是一种仅在 iterm 中更改控件 + 箭头行为的优雅方式。