vim regex multiline:搜索工作,match()没有

时间:2015-12-26 22:47:00

标签: regex vim match multiline

假设我有这个缓冲区:

a
b
c
(
1
2
3
)
@
#
$

我想在vimscript中获取括号之间的行内容。

/(\n\(.\n\)*)

确切地突出了我想要的东西。但我没有成功通过以下方式得到这个:

let pattern = '(\n\(.\n\)*)'
match(getline(1, '$'), pattern)

我尝试了很多东西,例如:

match(join(getline(1,'$'), '\n'), pattern)  

,即使是模式的双引号,但没有任何作用......任何想法?

(我的目标没有必要使这个匹配()工作,但只是为了从缓冲区得到vimscript的结果)

1 个答案:

答案 0 :(得分:3)

第一次尝试(match(getline(1, '$'), pattern))时,Vim会尝试在每行内找到里面的模式;因为你的模式是多行的,它永远不会匹配。

所以,你的第二次尝试是正确的方向,因为你试图加入线条,那么模式将有效地匹配......除非你使用'\n'作为连接的粘合剂:这个字符串是litterally替换为反斜杠\后跟n字符。只需用双引号替换单引号,然后解析特殊字符。

所以,这个版本会更好用:

echo matchstr(join(getline(1,'$'), "\n"), pattern)