Vim 如何基于s表达式中的路径内联所有文件内容

Vim 如何基于s表达式中的路径内联所有文件内容,vim,Vim,我对vimscripting一无所知,因此我正在努力创建一个函数来执行以下操作: 我有一些可以用以下语法嵌套的s表达式: (this::is::the::path word1 word2 (another::expresion words words) (yet::another::expresion words words) ) 和路径/主页/工作区。 第一个s表达式对应于/home/workspace/this/is/The/path中的文件 我想做的是查

我对vimscripting一无所知,因此我正在努力创建一个函数来执行以下操作:

我有一些可以用以下语法嵌套的s表达式:

(this::is::the::path word1 word2 (another::expresion words words)
 (yet::another::expresion
                words words)
)
和路径/主页/工作区。 第一个s表达式对应于/home/workspace/this/is/The/path中的文件

我想做的是查看所有的行,比如我已经直观地选择的那些s表达式,并用路径上的文件内容替换它们的调用,然后递归地执行


不要太担心我将内联的文件的语法。我只需要知道如何在vim调用方面进行内联和模式匹配等。如果任何东西看起来太模糊,你可以做出一些假设,请陈述它们。

我可以这样攻击它:

:cd /home/workspace
:%s#(\zs\w\+\(::\w\+\)\+#\=join(readfile(substitute(submatch(0), '::', '/', 'g')), '\n')#g
解释 将filespec表达式的所有匹配项\w\+\:\w\+\+替换为:help:sub replace expr 文件规范位于submatch0中 转换::转换为/通过替换 通过readfile读入文件内容 通过连接将所有行与换行符连接起来
你想要阅读吗?路径真的是用冒号分隔的吗?文件中的路径是用冒号分隔的,但在文件系统中它是/separatedread似乎有点帮助,但理想情况下,这一切都可以在一个函数中完成,我真的不知道如何做到这一点。