Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
vim regex multiline:search起作用,match()不';T_Regex_Vim_Match_Multiline - Fatal编程技术网

vim regex multiline:search起作用,match()不';T

vim regex multiline:search起作用,match()不';T,regex,vim,match,multiline,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) ,甚至双引号表示模式,但没有任何效果。。。有什么想法

假设我有一个缓冲区:

a
b
c
(
1
2
3
)
@
#
$
我想在vimscript中获得括号之间的行的内容

/(\n\(.\n\)*)
这正是我想要的。但我没有成功地用这样的东西来实现这一点:

let pattern = '(\n\(.\n\)*)'
match(getline(1, '$'), pattern)
我尝试了很多东西,比如:

match(join(getline(1,'$'), '\n'), pattern)  
,甚至双引号表示模式,但没有任何效果。。。有什么想法吗

(我的目标不是让这个匹配()工作,而是从缓冲区到vimscript获取结果)

第一次尝试(
match(getline(1,“$”),pattern)
),Vim尝试在每一行中找到模式;因为你的图案是多线的,所以永远不会匹配

所以,你第二次尝试的方向是正确的,因为你尝试连接线,那么模式将有效匹配。。。除非您使用
'\n'
作为联接的粘合剂:此字符串通常会替换为反斜杠
\
,后跟
n
字符。只需将单引号替换为双引号,即可解析特殊字符

因此,此版本将更好地工作:

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

也许,
let pattern='(\n\(.\n\)*)
?你是对的,经过编辑。在我看来,你正在寻找
(\n\(.{-})
。正如供参考的,这里有多行正则表达式原子。因此,您可能需要类似于
”(\(\\\.\{-}\)
的内容。我尝试了“help/\\\\”,但我认为“\\\”只是在列出的字符之前可用。很高兴知道不是这样!