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.webp

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

iTerm 2

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

Picture 2.webp

  • 用所需的组合键重复。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


推荐阅读

    linux命令补全工具?

    linux命令补全工具?,工具,系统,软件,地址,命令,名称,智能,环境,信息,终端,简

    linux如何引入命令?

    linux如何引入命令?,单位,系统,首页,名字,命令,终端,音乐,文件,目录,选项,lin

    linux关闭系统的命令?

    linux关闭系统的命令?,系统,工作,命令,时间,用户,指令,通知,目的,终端,表示,

    linux命令出现箭头?

    linux命令出现箭头?,系统,终端,箭头,等级,网络,状态,情况,首页,第一,命令,在l

    linux组播路由命令?

    linux组播路由命令?,网络,信息,地址,系统,通信,工具,命令,服务,数字,控制台,L

    更新文件命令linux?

    更新文件命令linux?,工作,系统,地址,信息,时间,命令,目录,基础,标准,网络,lin

    linux切换目标命令?

    linux切换目标命令?,系统,密码,工具,命令,一致,工作,用户,终端,目录,用户名,l

    linux系统nl命令?

    linux系统nl命令?,系统,工作,命令,信息,文件,标准,工具,单位,公式,内容,nl是

    linux操作数据库命令?

    linux操作数据库命令?,地址,服务,系统,密码,数据库,工具,名字,首页,命令,参

    linuxls命令没有?

    linuxls命令没有?,命令,系统,官方网站,工作,信息,文件,目录,下面,路径,开头,

    开机启动命令linux?

    开机启动命令linux?,软件,标准,环境,工作,设备,系统,名称,情况,电脑,位置,lin

    linux更改硬盘命令?

    linux更改硬盘命令?,系统,工具,电脑,号码,管理,名称,分区,首次,数据,环境,在L

    linuxll命令全称?

    linuxll命令全称?,系统,情况,档案,金属,制品,状态,中心,管理系统,命令,文件,l

    linux建立组群命令?

    linux建立组群命令?,系统,管理,名称,密码,技术,首次,数字,项目,代理,用户,如

    linux输出字符串命令?

    linux输出字符串命令?,标准,基础,字符串,资料,简介,商业,数字,系统,命令,汉

    linux提交程序命令行?

    linux提交程序命令行?,工作,系统,信息,地址,工程,目录,管理,环境,命令,功能,L

    linux复制几行命令行?

    linux复制几行命令行?,系统,位置,基本知识,设备,软件,文件,命令,源文件,连

    linux基本命令分类?

    linux基本命令分类?,系统,工作,管理,命令,网络,基础,人员,信息,百度,主体,lin

    linux命令程序运行?

    linux命令程序运行?,状态,系统,服务,情况,命令,进程,软件,数据,发行,时间,Lin

    linux重名名文件命令?

    linux重名名文件命令?,图片,名称,名字,文件,命令,位置,代码,软件,系统,文件