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

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


当前回答

实际上,这取决于您使用的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手册的链接以获取更多信息。

其他回答

从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),所以我有我的箭头键组合,这些按钮都设置为向前和向后跳转,但请做最适合你的。

这是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或任何其他应用程序。

灵感来自于另一个答案。

我有Alt+←/→工作:打开首选项»设置»键盘,设置选项光标向左发送字符串到shell: \033b,并设置选项光标向右发送字符串到shell: \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