如何根据s表达式中的路径内联所有文件的内容

时间:2014-08-16 00:10:43

标签: vim

我对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调用方面进行内联和模式匹配等。如果任何事情看起来太模糊,你可以做一些假设,请说明一下。

1 个答案:

答案 0 :(得分:0)

我可以像这样攻击它:

:cd /home/workspace
:%s#(\zs\w\+\(::\w\+\)\+#\=join(readfile(substitute(submatch(0), '::', '/', 'g')), '\n')#g

解释

  • \w\+\(::\w\+\)\+
  • 替换filespec表达式:help :sub-replace-expr的所有匹配项
  • filespec位于submatch(0)
  • 通过::
  • /转换为substitute()
  • 通过readfile()
  • 读取文件内容
  • 通过join()
  • 将所有行与换行符连接起来