使用正则表达式进行Vim多行搜索

时间:2018-03-08 15:51:29

标签: regex solaris vi

在Vim中,我试图找到连续2行的' 9'在第31栏。我试过了

exam_type_id

没有运气。如何在正则表达式中指定新行字符?我想使用^.\{30\}9.*$.\{30\}9 ^.\{30\}9.*\n.\{30\}9 ^.\{30\}9\_.*^.\{30\}9 运算符,而不是/s:

示例数据:

g:

第5行& 6应该是一场比赛。

添加Solaris标记以查看是否有人可能知道vi的风格。

1 个答案:

答案 0 :(得分:1)

万一你的文件有DOS行结尾(\r\n),其中一个应该有效:

 ^.\{30\}\zs9.*\r\?\n.\{30\}9
 ^.\{30\}\zs9.*[\r\n]\{1,2\}.\{30\}9

我添加了一个可选的回车符来计算DOS行结尾。我还添加了\zs来限制匹配从第一个9开始(这会在您搜索时将光标放在该字符上,但如果您使用{{1}则会更加引人注目}})。您不需要set hlsearch来进行比赛。

我上面的第一个vim正则表达式相当于PCRE中的\zsexplained here

第二个正则表达式有点宽泛,允许两个换行符的任意组合,但也允许两个条目之间有一个空行(^.{30}\K9.*\r?\n.{30}9),这可能是您可能接受的,也可能是不可接受的。

如果这些都不适合您,我建议您在问题中指定您的Vim和​​Solaris版本,并可能在问题中添加标记。