我在vim中使用:g
命令。有没有办法直接跳转(一个接一个,类似于:cn
)到:g
找到的行?
:h :g
似乎不包含此类设施。
答案 0 :(得分:3)
这取决于你对:g
做了什么。
如果您的:g
命令未更改匹配的模式,则可以按n
转到下一个匹配的行。
但如果您更改了模式,例如您执行:g/foo/d
或:g/foo/s/foo/bar/g
后,在您发出:g
命令后,这些行不会出现在那里。然后再也无法到达那条线。
答案 1 :(得分: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
然后返回正常模式。
答案 2 :(得分:0)
根据您的需要,您只需使用:grep
或:vimgrep
代替:g
,这会将匹配的行放入quickfix列表中。 (使用命令的l变体来填充位置列表)。