0

:g在 vim 中使用该命令。有没有办法直接跳转(一个接一个,类似于:cn)到找到的行:g

:h :g似乎不包含此类设施。

4

3 回答 3

3

这取决于您对:g.

如果您的:g命令没有更改匹配的模式,您可以按n转到下一个匹配的行。

但是如果您更改了模式,例如您更改了:g/foo/dor ,那么在您触发命令:g/foo/s/foo/bar/g后这些行将不存在。:g那么就没有办法再次到达那条线了。

于 2013-08-22T09:51:06.407 回答
2

连续跳转到模式匹配的常用方法是使用普通搜索,而不是全局命令。这是, /<pattern>, 然后n是连续匹配。

全局命令:g用于在一组不连续的行上运行另一个命令。对于一组连续的行,一个范围就足够了。例如::1,5<command>

但是,如果由于某种原因您需要使用全局命令,或者只是为了记录,有一种方法可以使用:g.

在 Vim 的帮助下:

When using "global" in Ex mode, a special case is using ":visual" as a
command.  This will move to a matching line, go to Normal mode to let you
execute commands there until you use |Q| to return to Ex mode.  This will be
repeated for each matching line.  While doing this you cannot use ":global".
To abort this type CTRL-C twice.

要查看完整的故事,:h multi-repeat.

因此,一步一步,它将是:

  • 进入 ex 模式(按Q)。

    这类似于命令行模式,但在命令执行后您无需返回正常模式,也无需键入前导:. 要从这里返回正常模式,:visual使用。

  • 运行执行子命令的全局命令:visual。这是,:g/<pattern>/visual

    这将使您进入每场比赛的正常模式。每次,您都可以使用 vim 的所有功能对那场比赛做任何您想做的事情,完成后,回到 ex 模式(Q再次按下)继续下一场比赛。

  • 当您完成最后一场比赛后,您将再次进入前模式。然后输入:visual返回正常模式。

于 2013-08-22T11:51:39.163 回答
0

根据您的需要,您可以简单地使用:grepor:vimgrep代替:g,这会将匹配的行放入 quickfix 列表中。(使用命令的 l 变体来填充位置列表)。

于 2013-08-22T18:57:15.070 回答