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

739 macos terminal keyboard-shortcuts

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

但有没有什么方法可以一字一句地跳,就像Cocoa应用程序中的Alt+ / 一样?

Kri*_* J. 543

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

  • 您可以在**终端>首选项>设置> [配置文件]>键盘**中启用"使用选项作为元键".然后您不必单独手动键入Esc. (236认同)
  • 重新按下两个键以便再次重新执行命令是不方便的.我发现在Mac OSX终端中执行此操作非常蹩脚,与GNOME终端相比. (44认同)
  • Re"离奇":"F"和"B"代表"前进"和"后退".Control-F将光标向前移动一个字符,Control-B将光标向后移动一个字符.使用Meta修饰符(或ESC)表示"按单词移动".这些是与emacs兼容的绑定.如果你正在使用bash,可以选择使用vi兼容的绑定,或者你可以使用`〜/ .inputrc`完全自定义它们. (10认同)
  • 另外如果你在一行的末尾点击`Esc` +`F`或者在行的开头点击另一个键组合,它只是插入字母.烦! (7认同)
  • 遗憾的是,对于我们这些需要用于键入重要shell符号(如〜和|)的选项键的人来说,使用选项作为元是一种选择 (就像在法语键盘上). (5认同)
  • @ChrisPage你非常喜欢我的朋友。谢谢。 (2认同)

Var*_*tta 396

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

  • alt (⌥)+ 用一个词F来跳转F前进
  • alt (⌥)+ 用一个词B来跳跃B

我观察到简单文本导航的默认emacs键绑定似乎适用于bash shell.您可以使用

  • alt (⌥)+ D删除从当前光标位置开始的单词
  • ctrl+ A跳到线的开头
  • ctrl+ E跳到行尾
  • ctrl+ K从光标位置开始杀死该行
  • ctrl+ Y从kill缓冲区粘贴文本
  • ctrl+ R从您的历史记录中反向搜索您在过去输入的命令
  • ctrl+ S转发搜索(在zsh中为我工作,但不是bash)
  • ctrl+ F以char为前进
  • ctrl+ B通过char向后移动
  • ctrl+ W从光标位置向后移除单词

  • 您可以在iterm2中更改meta,如下所示:Preferences - > Profiles - > Keys - > Left option键作为`+ ESC`,然后您可以使用OPTION f/b相应地向前和向后移动单词.[详细](http://ss64.com/bash/syntax-keyboard.html) (10认同)
  • [__ Ctrl + W__] - 从光标位置向后移除单词 (4认同)

小智 282

这是你如何做到的

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

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

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

  • 打开终端首选项(cmd+ ,);
  • 在"设置"选项卡上,选择"键盘",然后双击? ?它是否存在,或者如果不存在则添加它.
  • 根据需要设置修改器,并在框中键入快捷键:esc+ B,生成文本\033b(不能手动键入此文本).
  • 右键重复(esc+ F变为\033f)

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

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

  • 对于MacOSX 10+和iTerm用户:您可以在全局首选项上指定键快捷键或作为配置文件键组合.确保在下拉列表选择中选择:"发送转义序列",并在_ Esc +`字段中输入_back_的`B`或_forward_的`F` (7认同)

cwd*_*cwd 162

切换到iTerm2.它比普通的旧终端更自由,更好.此外,它有更多的自定义选项,如键盘快捷键.

我也喜欢你可以使用cmd和1-9在标签之间切换.尝试它,你永远不会回到常规终端:)

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

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

图片1.png

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

iTerm 2

  • 单击加号按钮以添加新的键盘快捷键
  • 在第一个框中键入CMD+Left arrow
  • 在第二个框中选择"发送转义码"
  • 在第三个框中键入字母 B

图片2.png

  • 重复所需的组合键.escape+ B向左移动一个单词,escape+ f向右移动一个单词.
  • 你也不妨设立cmd+ d以删除光标前面的单词escape+d

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

  • 无论我做什么,我都无法输入`Ctrl + Arrow Left`或`Right` - `Up`和`Down`工作:/尝试使用和不使用新的配置文件作为默认设置 (3认同)
  • 解决方案:我不得不在MacOS系统偏好设置 - >键盘下禁用任务控制快捷方式:) (3认同)

mdu*_*bez 146

实际上有一个更好的方法.按住option(alt在某些键盘上)并向左或向右按​​箭头键以逐字移动.就那么简单.

option
option

ctrle将带你到该行的结束,ctrla将带你到开始.

  • 有时这在某些情况下不起作用.对我来说,当我打开Terminal.app时,它很好,但是对于IntelliJ,它只打印了`[D`和`[C`.要解决这个问题,请添加`bind'"[D":backward-word'`和`bind'"[C":forward-word'`到我的`.bashrc`. (2认同)

Pet*_*ton 79

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

  • 要获得\ 033b,您实际上需要按Esc,然后按b. (20认同)
  • 我在Snow Leopard上发现只有在启用"启用选项作为元键"时它才有效.顺便说一句,这很酷.与Esc + B或Esc + F相比,密钥肯定更方便 (7认同)
  • 使用启用选项作为元键"关闭.ftr.对我来说很好. (2认同)
  • 出于好奇心,这到底发生了什么?为什么这个代码在OSX中开始有所不同?我怎样才能找到其他这样的代码? (2认同)

Mec*_*cki 39

实际上它取决于你使用的shell,但是大多数shell都有类似的绑定.您所指的绑定(例如Ctrl+ ACtrl+ E)是您在许多其他程序中找到的绑定,并且它们已经使用了很长时间,BTW也适用于大多数UI应用程序.

这是Bash的默认绑定:

最重要的Bash键盘快捷键

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

bind -f ~/.bash_key_bindings
Run Code Online (Sandbox Code Playgroud)

〜表示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
Run Code Online (Sandbox Code Playgroud)

这些只是设置了几个选项(例如禁用铃声;这可以在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
Run Code Online (Sandbox Code Playgroud)

这些确保单独的字符只是做什么,但确保字符是"键入"(他们自己插入shell).

"\C-dW": kill-word
"\C-dL": kill-line
"\C-dw": backward-kill-word
"\C-dl": backward-kill-line
"\C-da": kill-line
Run Code Online (Sandbox Code Playgroud)

这非常有趣.如果我点击Ctrl+ D单独(我选择d进行删除),则没有任何反应.但是,如果我然后键入小写字母w,则删除光标左侧的单词.但是,如果我键入大写字母,则光标右侧的单词将被终止.对于从光标开始的整行,l和L也是如此.如果我输入"a",则实际删除整行(光标前后的所有内容).

我把跳向前移动一个单词Ctrl+ F上,一个字向后Ctrl+B

"\C-f": forward-word
"\C-b": backward-word
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,您可以创建一个快捷方式,立即执行操作,或者您可以创建一个快捷方式,只需执行一个字符序列,然后您必须键入一个(或多个)字符才能执行操作在上面的例子中示出.

因此,如果您对默认绑定不满意,可以随意自定义它们.以下是bash手册链接以获取更多信息.


Mat*_*att 15

如果您检查Use option as meta key首选项的键盘选项卡,则分别为前向和后向单词以及?F(Alt+ F)和?B(Alt+ B)的默认emacs样式命令.

我建议阅读从Bash到Z-Shell.如果你想增加你的bash/zsh实力!


jch*_*hes 14

如果您恰好是Vim用户,可以尝试使用bash的vim模式.运行此~/.bashrc文件或将其放入您的文件中:

set -o vi
Run Code Online (Sandbox Code Playgroud)

默认情况下,您处于插入模式; 击中逃生,你可以像普通模式Vim一样四处移动,所以按字移动是w或者b,通常的移动键也可以.


Chr*_*age 12

因为Mac OS X Lion的10.7,终端地图Option- Left/Right ArrowEsc- b/f在默认情况下,所以这是现在内置的bash和使用这些emacs的兼容键绑定其他程序.


And*_*nch 8

在Bash中,这些都是Esc- BEsc- F.Bash有很多很多键盘快捷键; 看看输出,bind -p看看它们是什么.


Dzi*_*mid 8

使用自然文本编辑预设!

在此处输入图片说明

本质上,除了其他键序列外,它还绑定Option + LeftArrow到^[bsequence和Option + RightArrow到^[f

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


qix*_*qix 7

iterm2Preferences > Profile > Keys 下,单击+下面的Key Mappings并记录一个新的快捷方式。对于Action,分别选择Send Escape Sequence并输入bf用于向后和向前。

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

键盘系统首选项


Dan*_*anu 7

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


thi*_*wfx 5

这是执行此操作的 CLI 方法,已验证它可以在bash.

以下内容添加到您的~/.inputrc

# macOS Option + Left/Right arrow keys to move the cursor wordwise
"\e\e[C": forward-word
"\e\e[D": backward-word
Run Code Online (Sandbox Code Playgroud)

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

灵感来自另一个答案