3

我已经阅读了关于动态模板的 vim-wiki,我想要类似的、简单的“模板系统”。我创建了一个函数:

function! Read_template(file)
    execute '0r /home/zsolt/.vim/skeletons/'.a:file
    %substitute#\[:EVAL:\]\(.\{-\}\)\[:END:\]#\=eval(submatch(1))#ge
    %substitute#\[:READ:\]\(.\{-\}\)\[:END:\]#??????#ge
endfunction

我想从模板中包含一个文件。效果很好,但我该EVAL如何解决这个READ功能?评估包含的文件并不重要。

一个例子:

main.tex

\documentclass[a4paper]{article}
....

exam.tex

% Created [:EVAL:]strftime('%Y. %B. %d.')[:END:]
[:READ:]/path/of/main/main.tex[:READ:]

我执行Read_template("exam.tex")并希望exam.tex包括main.tex.

我怎样才能做到这一点?

4

2 回答 2

5

您需要阅读该文件并插入其内容。由于您不能使用:read(它将读取整行并且不能从替换中调用),您必须使用较低级别的readfile()Vimscript 函数,如下所示:

%substitute#\[:READ:\]\(.\{-\}\)\[:END:\]#\=join(readfile(submatch(1)),"\n")/#ge
于 2014-03-10T15:46:38.370 回答
1

您必须解析导入的每一行并应用需要的内容: - 表达式替换 - 包含其他模板等(这意味着您必须即时删除和添加行。在 mu 的最后一个版本中-template 模板扩展引擎,扩展在内存中完成)

仅供参考,我的 mu-template 工作已经具有此功能:http ://code.google.com/p/lh-vim/wiki/muTemplate#Completely_useless_recursive_example

于 2014-03-10T15:13:16.737 回答