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


11

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

say "Hello, how are you? I am good thank you. How is it going with you? Fine, thanks"

现在我想改变的话HelloHi

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

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

Answers:


19

命令行编辑是shell的功能,而不是终端的功能。可能你的shell是bash,可能它的命令行编辑样式设置为“emacs”。

以下是一些您可能会发现的Emacs风格的组合键:

  • 钙: beginning-of-line
  • CE: end-of-line
  • MF: forward-word
  • MB: 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(即Escape然后x)。终端有一个设置,可以在按下按键之前自动发送ESC Option。使用此功能可禁用Mac OS X在使用“选项”修改器时通常提供的扩展字符处理。因此,如果您使用少量扩展字符并希望Option+ x发送ESC x,则可以启用此终端选项。

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

  • 搜索“你好”:Cr H ello 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的信息页面了解详细信息)。


好吧,这与问题无关,但是如何将那些看起来像键盘键的词放在那里呢?
2010年

1
@先生。男人:使用<kbd>元素。此处的标记中允许使用HTML子集。外观是由于标签的站点局部样式(背景,边框颜色,边框样式,边框宽度等)。您可以查看我的帖子源标记本页面的 “查看源代码” )。请参阅meta.stackexchange.com/questions/5527,即使在MSO上禁用了奇特的样式:meta.stackexchange.com/questions/1939/#23571
Chris Johnsen 2010年

我不确定这是否显而易见,我花了一分钟才弄明白,但我没有使用元键我正在使用MBP,而我正在使用默认的终端配置。为了向前和向后移动单词,我可以按Esc,然后按F,或Esc,然后按B.只是想提一下,因为上面解释的方式是让我尝试按Esc + x然后按f或b ...
cwd

有没有办法改变环境或shell,以便我可以使用ctrl或fn +箭头键来匹配我的IDE?
codecowboy 2011年

1
您还可以通过添加set -o vi.bashrc 来使用vi绑定!gnu.org/software/bash/manual/html_node / ...
Will Munn

2

默认的readline绑定forward-word是Meta-F(bash(1)手册页,READLINE部分,移动命令部分)。我不确定Meta在OS X中的转换。也许选择。


+1 - 你其实是对的。这适用于OSX上的bash
Yuval 2010年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.