作为搜索结果获取来自正则表达式的所有匹配(/ <regexp>)</regexp>

时间:2014-10-14 14:24:56

标签: regex vim

所以我正在寻找一种方法来获取函数的所有参数(在Python中),如此定义

def a_function(param1, param2="foo", somethingelse):

如果我在vim中使用研究(/ regexp),我做了一个regexp(抱歉你的眼睛,我不擅长正则表达式),它匹配所有参数

\(def[[:blank:]]\+[_[:alnum:]]\+[[:blank:]]*(.*\)\@<=\([_[:alnum:]]\+[[:blank:]]*=\@=\|[_[:alnum:]]\+[[:blank:]]*,\@=\|\(,[[:blank:]]*\)\@<=[_[:alnum:]]\+\)\(.*):\)\@=

我尝试使用不同配置的matchlistmatchmatchstrmatchend等功能(尝试match,{{1}和循环中的matchstr但是我没有成功。

有没有办法让所有与vimscript列表中的正则表达式匹配的单词?

如果可能,我真的想保留这个正则表达式。

1 个答案:

答案 0 :(得分:3)

您可以使用替换并使用\=来收集匹配项。

:let lst = []
:%s/^\s*\zsdef\s\+.*):\ze\s*$/\=add(lst, submatch(0))/n

注意:这会导致更改搜索寄存器。

使用n标记为@Christian Brabandt建议将阻止对缓冲区进行更改。

我还简化了您的正则表达式,以搜索以def开头并以):结尾的行

有关详细信息,请参阅:

:h :s
:h :s/\=
:h /\zs
:h :s_flags