OS X终端中是否有任何方法可以逐字移动光标?

Is there any way in the OS X Terminal to move the cursor word by word?

我知道ctrl+a组合跳到当前命令的开头,ctrl+e组合跳到结尾。

但是,是否有任何方法可以逐字跳转,比如可可应用程序中的alt+←/→


您可以使用非常奇怪的esc+f移动到下一个单词的开头,并使用esc+b移动到当前单词的开头。


在Mac OS X上-以下键盘快捷键默认工作。请注意,您必须使选项键在终端首选项中(在"键盘"选项卡下)像元键一样工作。

  • ALT(?)+f按单词向前跳
  • ALT(?)+b向后跳一个字

我注意到,用于简单文本导航的默认Emacs键绑定似乎可以在bash shell上工作。你可以使用

  • ALT(?)+d删除从当前光标位置开始的单词
  • ctrl+a跳到行首
  • ctrl+e跳到行尾
  • ctrl+kbakbd,从光标位置开始终止行。
  • ctrl+y从kill缓冲区粘贴文本
  • CtrL+R,用于从历史记录中反向搜索过去键入的命令
  • ctrl+s用于正向搜索(在zsh中为我工作,但不在bash中工作)
  • ctrl+f向前移动一个字符
  • ctrl+b向后移动一个字符
  • ctrl+w从光标位置向后删除单词


你可以这样做

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

  • esc+XYKDB(左)
  • esc+f(右)

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

  • 打开终端首选项(cmd+);
  • 在"设置"选项卡上,选择"键盘",如果有则双击? ←,如果没有则添加。
  • 根据需要设置修改器,并在框中键入快捷键:esc+b,生成文本\033b(不能手动键入此文本)。
  • 对单词right重复(esc+f变为\033f)

或者,您也可以在textmate上引用此博客文章:

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


切换到ITerm2。它是免费的,而且比普通的老式航站楼要好得多。此外,它还有很多自定义选项,比如键盘快捷键。

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

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

  • 安装TyrM2
  • 启动,然后转到首选项窗格。
  • 选择键盘配置文件选项卡
  • 您可能需要将配置文件复制到新的文件中,然后删除箭头键快捷方式,如^+right/left,或者如果不关心备份,只需从默认配置文件中删除它们。
  • 下一步确保已选择修改的配置文件(带星号)

Picture 1.png

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

iTerm 2

  • 单击加号按钮添加新的键盘快捷方式
  • 在第一个框中键入cmd+left arrow
  • 在第二个框中选择"发送转义码"
  • 在第三个框中键入字母b

Picture 2.png

  • 用所需的组合键重复。escapebkbd+b向左移动一个单词,escapebkbd+f向右移动一个单词。
  • 您也可以设置cmd+d,用escapebkbd+d删除光标前面的单词。

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


实际上,有一种更好的方法。按住option(某些键盘上的alt),然后按向左或向右箭头键按Word移动。很简单。

option←(option←)option→

此外,CtrLBakBd将带您到达行尾,CtrLA将带您到达行首。


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


实际上,这取决于您使用的shell,但是大多数shell都有类似的绑定。您所指的绑定(例如ctrl+actrl+e)是您在许多其他程序中可以找到的绑定,它们可以使用很长时间,btw也可以在大多数UI应用程序中使用。

下面是bash的默认绑定:

最重要的bash键盘快捷键

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

1
bind -f ~/.bash_key_bindings

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

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

1
2
3
4
5
6
7
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网页上查找所有选项)。

1
2
3
4
5
6
7
8
9
10
"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

这些操作确保仅字符一个不做任何事情,但要确保字符是"键入的"(它们将自己插入外壳)。

1
2
3
4
5
"\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上向后跳一个字。

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

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

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


如果您碰巧是一个VIM用户,您可以尝试使用bash的VIM模式。运行此文件或将其放入您的~/.bashrc文件中:

1
set -o vi

默认情况下,您处于插入模式;点击Escape,您可以像在正常模式VIM中一样四处移动,所以按单词移动是wb,通常的移动键也可以工作。


如果在"首选项"的"键盘"选项卡中选中Use option as meta key,则前进和后退单词的默认Emacs样式命令和?F(alt+f)和?B(alt+b)。

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


从Mac OS X Lion 10.7开始,终端默认将option LEFT/右箭头映射到esc B/F,因此现在这是内置于bash和其他使用这些Emacs兼容键绑定的程序中。


在bash中,这些绑定到esc besc f。bash有许多,更多的快捷键;查看bind -p的输出以了解它们是什么。


按住选项键并单击要移动光标的位置


iterm2的首选项>配置文件>键下,单击键映射下面的+并记录新的快捷方式。对于action,分别选择Send Escape Sequence和类型bf作为"向后"和"向前"。

当我试图为(ctrl+)录制一个时,我注意到在键盘快捷键字段中箭头从未出现。结果发现我必须先禁用默认的Mac系统首选项>键盘>快捷键>任务控制快捷键以使事情正常工作,因为它们将覆盖ITerm2的默认快捷键。对于标准的终端应用程序也是如此。

Keyboard system preferences