假设我在 Mac OSX 终端中写了一条长命令,即
say "Hello, how are you? I am good thank you. How is it going with you? Fine, thanks"
现在我想把这个词Hello
改为Hi
。
要做到这一点,现在我必须一直按下(或按住)键盘左键,直到“光标”到达单词末尾Hello
,然后将其删除。通常的“按住 option”技术在大多数其他 OS X 应用程序中不起作用。
有没有办法可以一次跳过一个单词(或者任何其他更短的方法将光标移到那里)?
答案1
命令行编辑是你的 shell 的功能,而不是终端. 你的 shell 可能狂欢并且可能其命令行编辑样式设置为“emacs”。
以下是一些您可能会觉得方便的 Emacs 风格的组合键:
- 钙:
beginning-of-line
- 铈:
end-of-line
- 女士:
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 键。因此,你可以使用 ESCX(即Escape然后x)。终端有一个设置,可以在按住不放的情况下按下按键之前自动发送 ESC Option。使用此功能会禁用 Mac OS X 在使用 Option 修饰符时通常提供的扩展字符处理。因此,如果您使用少量扩展字符并希望Option+x发送 ESCX,然后你可以启用这个终端选项。
在您的示例中,有很多方法可以移动到“Hello”:
- 搜索“Hello”:Cr Hello Cj(或ESC)
- 在普通的 Emacs 中,你只需使用 RET ( Return) 即可在当前位置结束搜索并返回编辑。但在狂欢,默认绑定导致 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 部分狂欢信息页面) 了解详情。
答案2
默认的 readline 绑定forward-word
是 Meta-F (bash(1)
手册页,阅读线部分,移动命令子部分)。不过我不确定 Meta 在 OS X 中翻译成什么。也许是选项。