如何在OS X终端中逐字移动光标

我知道组合Ctrl+一个跳到当前命令的开头,Ctrl+E跳到结尾。

但是有没有办法像Cocoa应用程序中的Alt+/那样逐字跳转?

415305 次浏览

你可以这样做

默认情况下,终端有这些快捷方式逐字移动(左和右):

  • esc+B(左)
  • esc+F(右)

您可以配置alt+为您生成这些序列:

  • 开放终端首选项(cmd+,);
  • 在设置选项卡上,选择键盘并双击⌥ ←(如果存在),如果不存在,则添加它。
  • 根据需要设置修饰符,然后在框中键入快捷键:esc+B,生成文本\033b(您不能手动键入此文本)。
  • 重复单词右(esc+F变为\033f

或者,你可以参考这篇博客文章在文本:

http://blog.macromates.com/2006/word-movement-in-terminal/

我有Alt+/工作:打开首选项”设置”键盘,将条目设置为选项光标左侧将字符串发送到shell:\033b,并将选项光标右设置为将字符串发送到shell:\033f。您也可以将其用于其他控制键组合。

开箱即用,您可以使用非常奇怪的Esc+F移动到下一个单词的开头,Esc+B移动到当前单词的开头。

在Bash中,它们绑定到Esc-BEsc-F。Bash有很多,更多的键盘快捷键;看看bind -p的输出,看看它们是什么。

如果您在首选项的键盘选项卡中选中Use option as meta key,则默认的emacs样式命令分别用于向前和向后单词以及⌥FAlt+F)和⌥BAlt+B)。

我建议阅读从Bash到Z-Shell。如果你想提高你的bash/zsh能力!

实际上,这取决于您使用的shell,但是大多数shell都有类似的绑定。您所指的绑定(例如Ctrl+一个Ctrl+E)是您在许多其他程序中可以找到的绑定,并且它们已经使用了很长时间,顺便说一句,在大多数UI应用程序中也可以使用。

以下是Bash的默认绑定:

最重要的Bash键盘快捷键

还请注意,您可以自定义它们。您需要创建一个文件,如您所愿命名,我命名了我的。bash_key_bindings并将其放入我的主目录。在那里您可以设置一些通用bash选项,也可以设置键绑定。为了确保它们被应用,您需要修改一个名为". bashrc"的文件,bash在启动时读取该文件(如果它不存在,您必须创建它)并在那里进行以下调用:

bind -f ~/.bash_key_bindings

~表示bash中的主目录,如上所述,您可以随意命名文件,也可以将其放置在您喜欢的位置,只要您提供正确的路径+名称即可绑定。

让我给你看一些我的摘录。bash_key_bindings文件:

set meta-flag onset input-meta onset output-meta onset convert-meta offset show-all-if-ambiguous onset bell-style noneset print-completions-horizontally off

这些只是设置了几个选项(例如禁用铃声;这可以在bash网页上查找)。

"A": self-insert"B": self-insert"C": self-insert"D": self-insert"E": self-insert"F": self-insert"G": self-insert"H": self-insert"I": self-insert"J": self-insert

这些确保字符本身什么都不做,只是确保字符是“键入的”(它们将自己插入shell)。

"\C-dW": kill-word"\C-dL": kill-line"\C-dw": backward-kill-word"\C-dl": backward-kill-line"\C-da": kill-line

这很有趣。如果我单独点击Ctrl+D(我选择d删除),什么都不会发生。但是如果我然后键入小写的w,光标左侧的单词会被删除。但是如果我键入大写,光标右侧的单词会被删除。从光标开始的整行的l和L也是如此。如果我键入“a”,整行实际上都会被删除(光标前后的所有内容)。

我在Ctrl+F上向前跳一个字,在Ctrl+B上向后跳一个字

"\C-f": forward-word"\C-b": backward-word

正如您所看到的,您可以创建一个快捷方式,立即导致一个操作,或者您可以创建一个,它只是inits一个字符序列,然后您必须键入一个(或多个)字符才能导致操作发生,如上面的示例所示。

因此,如果您对默认绑定不满意,请随意自定义它们。这是一个链接到bash手册以获取更多信息。

在macOS(所有版本)上,以下键盘快捷键默认工作。

  • ALT+FF向右一个字。
  • ALT+B跳过B个单词。

请注意,您必须将选项键设置为与Meta键一样。您可以在终端中通过访问首选项(CMD+,)并选择配置文件->键盘来执行此操作。在iTerm2中选择rofiles->Keys->General并选择“选项键为Esc+”。

终端和iTerm2首选项屏幕

此外,一些用于简单文本导航的Emacs风格的键绑定似乎适用于bash shell。您可以使用:

  • CTRL+F向前移动一个字符
  • CTRL+B向后移动一个字符
  • CTRL+一个跳转到行的开始
  • CTRL+E跳转到行的末尾
  • CTRL+K杀死从光标位置开始的行
  • ALT+D删除从当前光标位置开始的单词
  • CTRL+W从光标位置向后删除单词
  • CTRL+Y从杀死缓冲区粘贴文本
  • CTRL+R从历史记录中反向搜索您过去键入的命令。
  • CTRL+S转发搜索(适用于ZSH,但不适用于bash)

如果您碰巧是Vim用户,您可以尝试bash的vim模式。运行此操作或将其放在您的~/.bashrc文件中:

set -o vi

默认情况下,您处于插入模式;点击转义,您可以像在正常模式Vim中一样四处移动,因此按单词移动是wb,以及通常的移动键也可以

从Mac OS X Lion 10.7开始,终端默认将选项-左/右箭头映射到Esc-b/f,因此现在这是使用这些与emacs兼容的键绑定的bash和其他程序的内置功能。

切换到iTerm2。它是免费的,比普通的旧终端好得多。它还有更多的自定义选项,比如键盘快捷键。

我也喜欢你可以使用cmd和1-9在选项卡之间切换。尝试一下,你永远不会回到常规终端:)

如何在iterm2中设置自定义键盘首选项

  • 安装iTerm2
  • 启动,然后转到首选项窗格。
  • 选择键盘配置文件选项卡
  • 您需要将配置文件复制到新的内容,然后删除箭头键快捷键,例如^+/,或者如果您不关心备份,只需从默认配置文件中删除它们。
  • 接下来确保您的修改配置文件被选中(星号)

图片1.png

  • 现在选择键盘选项卡(非常顶行)

iTerm 2

  • 单击加号按钮添加新的键盘快捷键
  • 在第一个框中键入CMD+左箭头
  • 在第二个框中选择“发送转义码”
  • 在第三个框中键入字母B

图片2.png

  • 逃脱+B向左移动一个单词,逃脱+f向右移动一个单词。
  • 您可能还希望设置cmd+d以删除光标前面的单词逃脱+d

我经常用箭头键按错按钮(cmd/控制/alt),所以我把箭头键与这些按钮的组合都设置为向前和向后跳转,但请做最适合你的事情。

实际上有一个更好的方法。按住选项(在某些键盘上为alt),然后按箭头键向左或向右按单词移动。就这么简单。

选项
选项

ctrle将带您到行的末尾,ctrl一个将带您到开始。

iterm2首选项>个人资料>密钥下,单击键映射下面的+并记录一个新的快捷方式。对于行动,选择Send Escape Sequence并键入bf分别用于向后和向前。

当我尝试为(Ctrl+)录制一个时,我注意到在键盘快捷键字段中箭头从未出现。原来我必须首先禁用默认的mac系统偏好设置>键盘>快捷方式>任务控制快捷方式才能正常工作,因为它们会覆盖iterm2的默认快捷方式。标准终端应用程序也应该如此。

键盘系统首选项

按住Option键并单击您希望光标移动的位置

使用自然文本编辑预设!

在此处输入图片描述

从本质上讲,它将Option+LeftArrow绑定到^[b序列,Option+RightArrow绑定到^[f序列

这适用于fish和bash,以及psql终端。

如前所述,您可以在~/.bashrc中添加set -o vi以使用vi/vim键绑定,或者您可以在.bashrc中添加以下部分以使用Ctrl和箭头键移动:

# bindings to move 1 word left/right with ctrl+left/right in terminal, just some apple stuff!bind '"\e[5C": forward-word'bind '"\e[5D": backward-word'# bindings to move 1 word left/right with ctrl+left/right in iTerm2, just some apple stuff!bind '"\e[1;5C": forward-word'bind '"\e[1;5D": backward-word'

要启动这些行代码的效果,要么source ~/.bashrc,要么启动一个新的终端会话。

iTerm2 Build 3.3.4用户的新答案:

第1步:(macOS X)系统偏好设置>键盘>快捷方式选项卡>选择任务控制(左面板)>取消选中标记为“向左移动空间”和“向右移动空间”的快捷方式

第2步:(iTerm2 Build 3.3.4)首选项>配置文件>选择*默认(左面板)>键选项卡>删除 "⌥->" 和“<-”条目>将“左选项()键:”和“右选项()键:”设置为Esc+

没有搞乱shell配置文件,没有搞乱劣质masOS(默认)终端,没有尴尬的Esc+F/B,冲洗和重复无意义。

成交!!!

享受这个技巧,我的程序员们!

出于某种原因,我的终端的选项+箭头不起作用。要在macOS 10.15.6上修复此问题,我打开了终端应用程序的首选项,并必须设置绑定。

Option-left = \033bOption-right = \033e

Mac终端应用程序中的键盘设置

出于某种原因,我的option-right被设置为\033f。现在它已经修复了,我可以再次自由地跳过termianl中的单词。

只需检查终端>首选项>设置>[配置文件]>键盘中的“使用选项作为元密钥”选项,就像@cris-page在这里提到的那样。

但是请注意,在macOS Catalina(10.15)和更新版本中,zsh成为新添加用户的默认shell:其默认配置仅将空格视为单词边界,而旧的bash使元左/右跳转到最近的非字母数字字符(类似于B/W,而不是b/w对于熟悉vim的人):

                  v----v- bash jumps here$ vim some-folder/what.txt_<- jump left twice from here^---^- zsh jumps here by default

(类似的动作也适用于元退格

有不止一种方法可以使zsh命令行编辑器导航工作类似于bash-这里有一个这样的方法:

# Place in your profile init script, e.g. `~/.zshrc`autoload -U select-word-styleselect-word-style bash

这是CLI这样做的方式,验证它适用于bash

以下添加到您的~/.inputrc

# macOS Option + Left/Right arrow keys to move the cursor wordwise"\e\e[C": forward-word"\e\e[D": backward-word

这种方法的优点是它与终端应用程序无关-无论您使用Terminal.app、iTerm2还是任何其他应用程序都无关紧要。

灵感来自另一个答案