如何在vim中搜索所有不包含“ /”的字符串?

时间:2019-02-18 18:28:35

标签: regex vim

我试图匹配仅包含一个/的文件中的行,所以我想我可以搜索不包含/的任何长度的字符串,然后完全匹配一个/,然后匹配另一个不包含/的任意长度的字符串,最后以换行符结束。

我对此的尝试是[^/]*/[^/]*$。但是,这似乎不起作用。 我继续尝试仅匹配此模式的一部分,然后开始尝试匹配不包含/的任何长度的字符串,我认为该字符串应该只是[^/]*,但这是行不通的。 / p>

我对regex非常熟悉,但不熟悉在vim中使用它,因此,首先,我是否因为使用vim而将regex输入错误?其次,如果我输入的vim是正确的,那么我的正则表达式有什么问题?

1 个答案:

答案 0 :(得分:2)

您可以使用

搜索与模式匹配的所有行
:g/^[^\/]*\/[^\/]*$

请注意,g将匹配所有匹配项,此处需要转义反斜杠,并且模式匹配

  • ^-一行的开头
  • [^\/]*-除/以外的0多个字符
  • \/-一个/
  • [^\/]*-除/以外的0多个字符
  • $-行尾。

请注意,[^\/]*(带括号的表达式)与Vim中的换行符不匹配,这与Sublime Text 3或Notepad ++之类的文本编辑器不同,因此,它将完全符合您的需求。

请注意,如果您选择另一个定界符,则可以避免转义反斜杠。参见Vim regex reference

  

通常,您需要在包含UNIX文件路径的文本中执行S&R-内部带有斜杠("/")的文本字符串。因为S&R命令使用斜杠进行模式/替换分隔,所以您必须转义模式中的每个斜杠,即,对模式中的每个"\/"使用"/" ...为避免这种所谓的“反斜杠炎”,可以在S&R中使用不同的分隔符。

因此,您也可以将:g~^[^/]*/[^/]*$~:g#^[^/]*/[^/]*$#用作Amadan suggests