使用当前行作为参考点的Vim搜索和替换

75

有没有办法使用当前行作为参考来指定搜索和替换范围?我可以像这样使用明确的行号来指定范围:

:5,15s/foo/bar/g

如何指定范围从当前行到当前行以下(或以上)10行,并仅对第5到15行进行搜索和替换?


1
你查看过 :h range 吗? - Kent
1
@Kent:在我最近的Vim中,它跳转到了range()文档,不幸的是。但是:range可以解决问题。 - Ingo Karkat
@IngoKarkat 很有趣,我有7.3.1287版本。:h range会带我到那里。(与:h:range相同) - Kent
@Kent:非常有趣。对我来说,似乎取决于Windows(range()先)和Linux(:range先),但我没有完全相同的版本。我会记下来进一步调查。 - Ingo Karkat
1
Vim的搜索和替换功能非常强大。在这里,您可以获得您所需的内容:https://vim.fandom.com/wiki/Search_and_replace - Deepam Gupta
2个回答

148
你可以使用 . 表示当前位置,使用 .+10 表示向下跳10行:
:.,.+10s/foo/bar/g

其他一些有用的范围:

  • % 表示整个文件。例如::%s/foo/bar/g
  • '<,'> 表示可视选定块内的行。如果可视区域的开始或结束在一行的中间,这可能会导致包含更多内容。整行都会被包括进去。
  • 'a,'b 表示从标记 a 到标记 b。
  • .,$ 表示从当前行到文件末尾。

27
对于那些计算字符数的人来说,在该表达式中都不需要使用 .。因此,:,+10s/foo/bar/g 是等效的。 - ravron

29

:help :range会给你所有细节;你可以做相当复杂的事情,例如:'a;/pat1/-1

对于从当前行开始的范围,一个巧妙的技巧是通过在:前面加上数字来启动命令行模式:例如5:变成:.,.+4

专业提示:学习如何查找命令并浏览内置的:help;它非常全面,并提供许多技巧。你不会像其他编辑器一样快速地学习Vim,但如果你致力于持续学习,它将证明是一个非常强大和高效的编辑器。


7
对于那个 5: 技巧,我给一个加一的赞。这很巧妙。你可以在 :help N: 找到它,或者如果你愿意滚动一点,也可以在 :help :range 下找到它。 - ravron

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