2013-08-22 30 views
0

我在vim中使用:g命令。有沒有辦法直接跳轉到:g找到的行(類似於:cn)?通過vim獲得的線路循環:g

:h :g似乎並不包含此類設施。

+0

使用':%s/pattern/replacement/gc'。在這裏,':g'似乎是錯誤的工具。 – romainl

回答

3

這取決於你對:g做了什麼。

如果您的:g命令沒有更改匹配的模式,則可以按n轉到下一個匹配的行。

但是如果你改變了模式,例如你做了:g/foo/d:g/foo/s/foo/bar/g,那麼在你啓動:g命令後,那些行不會在那裏。那麼再也無法達到這些線。

+0

也許他使用':g'這個默認行爲是'p',只是想循環打印出的行? (這將是你的第二行) – FDinoff

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)繼續下一場比賽。

  • 當你完成最後一場比賽時,你將會再次進入ex模式。輸入:visual然後返回到正常模式。

0

取決於你想要什麼,你可以簡單地使用:grep:vimgrep代替:g,這將使匹配行到quickfix表。 (使用命令的l個變體填充位置列表)。