繁体   English   中英

如何在 OS X 终端中逐字移动 cursor

[英]How to move the cursor word by word in the OS X Terminal

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

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

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

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

  • ALT(⌥)+ F跳转˚Forward由字
  • ALT(⌥)+ B到跳跃ackward由字

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

  • alt (⌥) + D从当前光标位置开始删除一个单词
  • ctrl + A跳转到行首
  • ctrl + E跳转到行尾
  • ctrl + K杀死从光标位置开始的行
  • ctrl + Y从终止缓冲区粘贴文本
  • ctrl + R从历史记录中反向搜索您过去输入的命令
  • ctrl + S转发搜索(适用于我的 zsh 但不适用于 bash)
  • ctrl + F向前移动一个字符
  • ctrl + B向后移动一个字符
  • ctrl + W从光标位置向后删除单词

这是你可以做到的方法

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

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

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

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

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

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

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

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

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

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

图1.png

  • 现在选择键盘选项卡(最顶行)

术语 2

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

图2.png

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

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

其实还有更好的办法。 按住option (某些键盘上的alt )并按向左或向右箭头键按单词移动。 就那么简单。

选项
选项

同样ctrl e将带您到行尾, ctrl a将带您到开头。

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

实际上这取决于您使用的外壳,但是大多数外壳具有类似的绑定。 您所指的绑定(例如Ctrl + ACtrl + E )是您可以在许多其他程序中找到的绑定,并且它们已经使用了很长时间,顺便说一句,也适用于大多数 UI 应用程序。

下面是 Bash 的默认绑定:

最重要的 Bash 键盘快捷键

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

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

这些确保字符本身只是确保“键入”字符(它们将自己插入到外壳中)之外什么都不做。

"\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 手册链接以获取更多信息。

使用自然文本编辑预设!

在此处输入图片说明

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

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

按住 Option 键并单击您希望光标移动的位置

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

set -o vi

默认情况下,您处于插入模式; 点击转义,你可以像在正常模式 Vim 中一样四处移动,所以按单词移动是wb ,并且通常的移动键也可以使用

如果您在首选项的键盘选项卡中选中Use option as meta key ,则默认 emacs 样式命令分别用于向前和向后单词以及⌥F ( Alt + F ) 和⌥B ( Alt + B )。

我建议阅读From Bash to Z-Shell 如果你想提高你的 bash/zsh 实力!

从 Mac OS X Lion 10.7 开始,默认情况下终端将Option - Left/Right Arrow映射到Esc - b/f ,因此它现在内置于 bash 和其他使用这些 emacs 兼容键绑定的程序中。

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

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

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

键盘系统首选项

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

要启动这些代码行的效果,请使用source ~/.bashrc或启动一个新的终端会话。

iTerm2 Build 3.3.4 用户的新答案:

步骤 1:(macOS X) 系统偏好设置 > 键盘 > 快捷方式选项卡 > 选择任务控制(左面板)> 取消选中标记为“向左移动一个空格”和“向右移动一个空格”的快捷方式

第 2 步:(iTerm2 Build 3.3.4) Preferences > Profiles > Select * Default (left panel) > Keys tab > 删除 "⌥->" 和 "⌥<-" 条目 > 设置两个 "Left Option (⌥) Key: " 和 "Right Option (⌥) Key:" 到 Esc+

不要乱用外壳配置文件,不要乱用劣质的 masOS(默认)终端,没有尴尬的 Esc+F/B,冲洗和重复无意义。

木已成舟!!!

享受这个技巧吧,我的程序员伙伴们!

出于某种原因,我的终端选项+箭头不起作用。 为了在 macOS 10.15.6 上解决这个问题,我打开了终端应用程序的首选项,并且必须设置绑定。

Option-left = \033b
Option-right = \033e

Mac 终端应用程序中的键盘设置

出于某种原因,我的option-right被设置为\\033f 现在它已修复,我可以再次自由地跳过 termianl 中的单词。

只需在Terminal > Preferences > Settings > [profile] > Keyboard 中检查“ Use Option as meta key ”选项,正如@cris-page 在这里已经提到的。

但是请注意,在 macOS Catalina (10.15) 及更新版本中, zsh成为新添加用户的默认 shell:其默认配置仅将空格视为单词边界,而旧的bash使 meta-left/right 跳转到最近的非字母数字字符(类似于B / W而不是b / w对于那些熟悉vim 的人):

                  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

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

灵感来自另一个答案

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM