我对vimscripting一无所知所以我正在努力创建一个函数来执行以下操作:
我有一些可以使用以下语法嵌套的表达式:
(this::is::the::path word1 word2 (another::expresion words words)
(yet::another::expresion
words words)
)
路径/home/workspace
。
第一个s表达式对应于/ home / workspace / this / is / the / path
我想要做的是查看所有的行,比如我在视觉上选择的那些s表达式,并用该路径上的文件内容替换它们的调用,并以递归方式执行。
不要太担心我将要内联的文件的语法。我只需要知道如何在vim调用方面进行内联和模式匹配等。如果任何事情看起来太模糊,你可以做一些假设,请说明一下。
答案 0 :(得分:0)
我可以像这样攻击它:
:cd /home/workspace
:%s#(\zs\w\+\(::\w\+\)\+#\=join(readfile(substitute(submatch(0), '::', '/', 'g')), '\n')#g
\w\+\(::\w\+\)\+
:help :sub-replace-expr
的所有匹配项
submatch(0)
::
/
转换为substitute()
readfile()
join()