所以我正在寻找一种方法来获取函数的所有参数(在Python中),如此定义
def a_function(param1, param2="foo", somethingelse):
如果我在vim中使用研究(/ regexp),我做了一个regexp(抱歉你的眼睛,我不擅长正则表达式),它匹配所有参数
\(def[[:blank:]]\+[_[:alnum:]]\+[[:blank:]]*(.*\)\@<=\([_[:alnum:]]\+[[:blank:]]*=\@=\|[_[:alnum:]]\+[[:blank:]]*,\@=\|\(,[[:blank:]]*\)\@<=[_[:alnum:]]\+\)\(.*):\)\@=
我尝试使用不同配置的matchlist
,match
,matchstr
,matchend
等功能(尝试match
,{{1}和循环中的matchstr
但是我没有成功。
有没有办法让所有与vimscript列表中的正则表达式匹配的单词?
如果可能,我真的想保留这个正则表达式。
答案 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