如何在Vim中重复一个导航命令

5

.键可用于重复最后一条插入命令。然而,有时我们可能需要执行一些与插入无关的导航操作,但又希望将其重复。

假设我们需要注释掉以下这些行:

// line of text
// line of text
line of text
line of text

插入命令是输入两个斜杠和一个空格。可以使用“.”键重复该操作。导航则是向下移动一行,然后向左移动若干字符。该部分无法通过“.”键命令捕获。

如何实现这个功能呢?我曾经读到在几年前的Vi版本中没有此功能,但我想知道它是否存在于最新版本的Vim中。


请参阅https://dev59.com/0l8d5IYBdhLWcg3wsDxW。 - joeljpa
3个回答

5
  1. 按下 qX,其中的X是任意可写寄存器(通常选择任意小写字母)。
  2. 执行您想要记录的操作。
  3. 再次按下q停止录制。
  4. 按下@X(其中的X与前面的相同),即可播放它(如果使用计数,则可以重复count次)。
  5. 按下@@以重新播放最近使用的宏(如果使用计数,则可以重复count次)。

我看到几年前在Vi中没有支持该功能,但我想知道现在在最新版本的Vim中是否存在。

如果Vim文档是可信的,则Vi不支持录制(步骤1-3),但支持@。然后,您必须使用"Xy<motion>或其他寄存器写入命令手动将字符复制到目标寄存器中。这在Vim下也可以工作,但我不建议使用,因为它更容易出错。


3
“qq” 是一种非常常见的选择,用于一次性的录音。 - romainl

2
另一种方法是“块选择然后编辑”方法:
  1. ctrl + v - 块选择

  2. 然后向下移动 jdown-arrow

  3. shift + i 会使你进入插入模式。在这里进行更改,以便反映在你选择的所有其他行上。

  4. esc 按两次将显示/重复您在第一行上所做的更改。


0
如果您有一系列相似的行并想在其开头放置//,可以执行以下操作:
:15,25norm! I//<space>

你也可以使用视觉区域(vip 选择整个段落)

:'<,'>norm! I//<space>

使用模式

:g/TODO/norm! I//<space>

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