Vim中搜索命令“//”是如何工作的?

16
在搜索一些内容后,如果你按下//键,似乎会获得下一个结果。这与n有何不同?应该如何使用它?//e匹配什么,还有哪些其他选项可用于//

11
常见的程序员软件工具。FAQ中已经非常明确地说明了这一点,因此我认为这不应该被关闭。我不认为有很多会计或文员使用Vim :-) - paxdiablo
哈哈,还有一个完整的标签专门用于Vim。 - Chetan
3个回答

18

搜索命令的格式如下:

/pattern/offset<cr>
如果省略了pattern部分,则搜索将查找上次搜索的最后一个模式。如果省略偏移量,则不应用偏移量。偏移量基本上是在找到pattern项目后对光标进行的操作。
大多数vi用户熟悉没有偏移量的变体/pax<cr>和重复上次搜索/<cr>,它等同于n
在您的具体示例中,//<cr>/<cr>相同,它表示重复上次搜索并且不应用偏移量。
另一方面,//e<cr>表示重复上次搜索并将光标移动到找到的项目的末尾。偏移量为:
[num]         [num] lines downwards, in column 1
+[num]        [num] lines downwards, in column 1
-[num]        [num] lines upwards, in column 1
e[+num]       [num] characters to the right of the end of the match
e[-num]       [num] characters to the left of the end of the match
s[+num]       [num] characters to the right of the start of the match
s[-num]       [num] characters to the left of the start of the match
b[+num]       [num] identical to s[+num] above (mnemonic: begin)
b[-num]       [num] identical to s[-num] above (mnemonic: begin)
;{pattern}    perform another search, see |//;|

没有指定数字num时,加减符号默认为1


完美,扎实的答案!谢谢! - Chetan

9

//的一个好处是可以与s命令一起使用。因此,如果您最初搜索/Foo,然后决定用Bar替换它,您可以这样做而不必重复模式。只需执行:%s//Bar/g

显然,如果模式更加复杂,则此功能更加有用。


6

//<CR> 的意思是重复上一次搜索,不带偏移量。

//e<CR> 的意思是重复上一次搜索,但会定位到匹配项的结尾。

n/<CR> 相同,它们都使用上一次的模式和偏移量,但是 n 会保留上一次的搜索方向,而 / 总是查找下一个匹配项。

请参阅 :h last-pattern:h search-offset 以获得有关这些命令及其选项的详细说明。


那么 // 是从文件顶部开始搜索吗? - paxdiablo
不,它从你所在的位置向前搜索。 - Josh Lee
2
偏移量(Offset)通常是指文件顶部的位置。// 将会从你当前所在的位置开始搜索,而 n 将会从上一次匹配的位置开始搜索。顺便说一下,你也可以在替换和全局命令中使用 //。如果你需要进行较为棘手的匹配,并且想要在正则搜索之前先进行测试,那这个功能就很有用了。 - Alligator

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