如何在 OS X 终端中跳过单词?

Yuv*_*val 12 terminal osx-snow-leopard macos

假设我在 Mac OSX 终端中写了一个长命令,即

say "Hello, how are you? I am good thank you. How is it going with you? Fine, thanks"
Run Code Online (Sandbox Code Playgroud)

现在我想改变的话HelloHi

要做到这一点,现在我必须一直按住(或按住)左键盘键,直到“光标”到达单词的末尾Hello,然后将其删除。通常的“按住选项”技术不像在大多数其他 OS X 应用程序中那样工作。

有没有办法一次跳过一个单词(或任何其他更短的光标方式)?

Chr*_*sen 21

命令行编辑是 shell 的功能,而不是Terminal 的功能。可能你的 shell 是bash并且它的命令行编辑风格可能设置为“emacs”。

以下是一些您可能会觉得很方便的 Emacs 风格的组合键:

  • 钙: beginning-of-line
  • 策: end-of-line
  • MF: forward-word
  • 兆: backward-word
  • 光盘: delete-char
  • Md:(kill-word删除下一个'单词')
  • M-DEL: backward-kill-word

C- x表示Control+ x,所以 Ca 是Control+ a

M- x表示Meta+ x,但您的键盘上可能没有 Meta 键。因此,您可以使用 ESC x(即Escapethen x)。终端有一个设置,可以在按住键之前自动发送 ESC Option。使用此功能会禁用 Mac OS X 在使用 Option 修饰符时通常提供的扩展字符处理。因此,如果您使用很少的扩展字符并希望Option+x发送 ESC x,那么您可以启用此终端选项。

在您的示例中,有很多方法可以转到“Hello”:

  • 搜索“你好”:Cr 你好 Cj(或 ESC)
    • 在普通 Emacs 中,您只需使用 RET ( Return) 在当前位置结束搜索并返回编辑。但是在bash 中,默认绑定会导致 RET(即 Cm)始终执行当前行,即使增量搜索处于活动状态。所以 Cj/ESC 部分是对正常 Emacs 的偏差。
  • 跳到行首并向前移动:Ca Mf Cf (或?)
  • 跳到行首,然后按单词移动:Ca Mf Mf Mb
  • 经常使用 Mb(只有将 Option 映射到 Meta 才真正可行)。

还有几种方法可以完成您想要的替换:

  • 删除单词并替换它:Md H i
  • 删除字符并替换它们: Cd Cd Cd Cd Cd H i
  • 移过“H”并删除以下工作,替换它:Cf Md i
  • 移过“H”并删除剩余的字符,替换它们: Cf Cd Cd Cd Cd i

如果你停在词尾(可能通过 Ca Mf Mf),你可以使用 M-DEL H i。

您可能会做一些类似的事情bind -P | less来寻找其他有趣的绑定。咨询的ReadLine一节的bash的手册页(或在readline的的部分bash的信息页面了解详细信息)。