我知道组合Ctrl+A可以跳转到当前命令的开头,Ctrl+E可以跳转到结尾。

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


以下是你可以做到的方法

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

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

您可以配置alt+←和→来生成这些序列:

打开终端首选项(cmd+,); 在“设置”选项卡上,选择“键盘”,如果有,双击“键盘”“←”;如果没有,则添加“键盘”。 根据需要设置修饰符,并在框中键入快捷键:esc+B,生成文本\033b(不能手动键入此文本)。 重复word-right (esc+F变成\033f)

或者,你可以参考这篇文章在textmate:

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


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


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


在Bash中,这些绑定到Esc-B和Esc-F。 Bash有很多很多快捷键;看一看bind -p的输出,看看它们是什么。


如果您在首选项的键盘选项卡中勾选“使用选项作为元键”,则默认的emacs样式命令分别为向前和向后的字和“F (Alt+F)”和“B (Alt+B)”。

我推荐阅读《From Bash to Z-Shell》。如果你想增加你的bash/zsh能力!


实际上,这取决于您使用的shell,但大多数shell都有类似的绑定。你提到的绑定(例如Ctrl+A和Ctrl+E)是你会在许多其他程序中找到的绑定,它们已经使用了很长时间,顺便说一下,在大多数UI应用程序中也适用。

下面是Bash的默认绑定:

最重要的Bash键盘快捷键

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

bind -f ~/.bash_key_bindings

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

让我向您展示我的.bash_key_bindings文件的一些摘录:

set meta-flag on
set input-meta on
set output-meta on
set convert-meta off
set show-all-if-ambiguous on
set bell-style none
set 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

正如你所看到的,你可以创建一个快捷方式,它会立即导致一个动作,或者你可以创建一个快捷方式,它只是初始化一个字符序列,然后你必须输入一个(或多个)字符来导致一个动作发生,如上面的例子所示。

因此,如果您对默认绑定不满意,可以随意定制它们。这里有bash手册的链接以获取更多信息。


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

ALT+F跳跃向前一个字。 ALT+B向后跳一个字。

注意,你必须使设置选项键的行为像元键。您可以在终端中通过访问首选项(CMD+,)并选择配置文件->键盘来做到这一点。在“iTerm2 Pselect profile -> Keys -> General”中选择“Option key as Esc+”。

此外,一些用于简单文本导航的emacs风格的键绑定似乎可以在bash shell上工作。你可以使用:

CTRL+F向前移动一个字符 CTRL+B向后移动一个字符 按CTRL+A跳转到行首 按CTRL+E跳转到行尾 按CTRL+K终止从光标位置开始的行 ALT+D删除从当前光标位置开始的单词 按CTRL+W从光标位置向后删除单词 CTRL+Y从终止缓冲区粘贴文本 CTRL+R从历史记录中反向搜索过去键入的命令。 CTRL+S转发搜索(在ZSH为我工作,但不是bash)


如果您碰巧是Vim用户,您可以尝试bash的Vim模式。运行这个或者把它放在~/中。bashrc文件:(

set -o vi

默认情况下,您处于插入模式;点击escape,你就可以像在普通模式的Vim中一样四处移动,所以按字移动是w或b,通常的移动键也可以工作。


从Mac OS X Lion 10.7开始,终端默认将option -左/右箭头映射为Esc-b/f,所以现在bash和其他使用这些emacs兼容键绑定的程序都内置了这个功能。


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

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

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

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

现在选择键盘选项卡(最上面一行)

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

重复使用所需的组合键。escape+B向左移动一个单词,escape+f向右移动一个单词。 你也可以设置cmd+d,用转义+d删除光标前面的单词

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


实际上有一个更好的方法。按住“选项”(在某些键盘上为“alt”)并按左或右方向键按字移动。就这么简单。

选择← 选项→

此外,ctrl将带你到行结束和ctrla将带你到开始。


在iterm2的Preferences > Profile > Keys下,单击Key Mappings下面的+并记录一个新的快捷方式。对于Action,选择发送转义序列,并分别输入b或f用于向后和向前。

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


按住Option键,然后单击光标要移动的位置


使用自然文本编辑预设!

本质上,它在其他键序列中绑定Option + LeftArrow到^[b序列,Option + RightArrow到^[f序列

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


如前所述,您可以在~/中添加set -o vi。bashrc使用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'

要启动这几行代码的效果,请选择源~/。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 = \033b
Option-right = \033e

出于某种原因,我拥有的选项权被设置为\033f。现在它已经修复了,我可以再次在终端中自由地跳过单词。


只要检查“使用选项作为元键”选项在终端>首选项>设置>[配置文件]>键盘,在这里已经提到了@ crisr -page。

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

                  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-style
select-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

这种方法的优点是它与终端应用程序无关——不管你是否使用终端。app、iTerm2或任何其他应用程序。

灵感来自于另一个答案。