在命令模式下向前/向后移动一个单词?

6
假设我正在使用vim命令模式复制文件,并且我的光标位于行末。
:!cp path/to/original/file path/to/new/file

我可以像在shell中输入 Esc b 一样跳回一个单词吗?

4个回答

8

你不能使用“Esc b”,因为那会丢弃你正在输入的命令。但是你可以绑定一些按键来移动。

问题已经在这里得到了回答:在Vim命令模式下导航

简单的方法就是添加:

cnoremap <C-a> <Home>
cnoremap <C-e> <End>
cnoremap <C-p> <Up>
cnoremap <C-n> <Down>
cnoremap <C-b> <Left>
cnoremap <C-f> <Right>
cnoremap <M-b> <S-Left>
cnoremap <M-f> <S-Right>

在你的 .vimrc 文件中。

非常感谢。顺便说一下,你回答中的第二个链接只是链接回到了这个问题。 - David Tuite
抱歉,我复制粘贴了错误的链接。而且现在我也找不到第一个链接了... 真糟糕。 - rks

3

一个很好的vim功能是ctrl-f。在命令行模式下输入^f(或者使用cedit选项指定的任何键,其中ctrl-f是默认值)与从正常模式下输入q:具有相同的效果;它会将您的整个命令历史记录拉到一个窗口中,并让您将其作为缓冲区进行编辑。请尝试:help cmdwin了解更多详细信息。


q:,而不是:q--那可能是一个错误! - echristopherson

2

如果您需要输入和编辑复杂命令,您可能会喜欢直接在命令行窗口中工作,该窗口可以通过正常模式命令q:访问。请参阅:h 20.5:h q:。或者,如果您已经处于命令模式,可以使用C-f访问命令行窗口。

  • 例如,在正常模式下键入q:以进入命令行窗口(或从命令行模式键入C-f)。
  • 您可以使用标准动作移动到先前的命令,并像往常一样进行编辑。
  • 当您想要执行刚刚编辑的命令时,请在此命令行窗口中在正常模式下按enter。光标所在行将作为命令在打开命令行窗口之前的窗口中执行。

另一个要考虑的选择是从另一个缓冲区编辑/复制命令。您可以通过复制所需文本并在命令模式下键入C-R n来将其粘贴到命令模式中,其中n是您复制到的寄存器。

顺便说一下:我喜欢@rks提供的映射。但是,如果您没有这些映射,可以使用开箱即用的命令。查看:h c_<S-Left>:h c_<S-Right>:h 20.1


0
在vim的命令模式下,我只需使用ctrl-left和ctrl-right箭头。在bash中也是一样的 - 我之前不知道还有esc-b的方法。
在我的Ubuntu和Debian系统上,不需要编辑.vimrc文件即可实现此功能,但在其他系统上可能会有所不同。这可能基于操作系统预装的标准配置。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接