Emacs的模板引擎?

时间:2011-07-27 23:54:21

标签: templates emacs lisp elisp template-engine

我见过Emacs的不同模板引擎(包括yasnippet),但我想要的是一个不同的野兽。在你写作的时候,大多数模板引擎都会帮助你。我想要的更像是“文本生成器”而不是打字保护程序。我即将尝试实现它,但只是提出问题,看看你是否可以给我提示实现类似的emacs包。

总结一下,我想要的是在文档中(在给定语言或文本格式的注释中)内嵌emacs-lisp代码,以在标记内生成文本,并使用任何组合键更新它。例如,假设我想生成一些有点长且重复的LaTeX代码,但我可以使用一些变量进行参数化:

... rest of the normal text...
# (deftemplate my-repetitive-latex-code (parameter)
#   ("blah blah" parameter "more blah blah")
# 
# (defvar *latex-code-parameters* '("abc" "def"))
# 
# (apply-template #'my-repetitive-latex-code *latex-code-paramters*)
#
# START GENERATED TEXT
# END GENERATED TEXT
... rest of the normal text...

我的想法是,当我“评估”评论的emacs-lisp代码时,系统将查找下一个START GENERATED TEXT标记,并插入评估所选代码的结果(即包含文本参数abc然后是def),类似于:

# START GENERATED TEXT
blah blah abc more blah blah
blah blah def more blah blah
# END GENERATED TEXT

或者更好的是,一些类似于Perl Text::Template的模板引擎能够区分用Perl编写的位(使用标记),并用内联替换结果,但是,在这种情况下,当然,使用emacs-lisp作为编程语言。 (例如,我使用Perl Text :: Template来生成我博士的PGF / TikZ图形,这真的是一个很好的组合,但我不得不使用外部程序(Perl)来过滤文件,然后再将它们送到胶乳。)

3 个答案:

答案 0 :(得分:3)

您的要求立即让我想到Org Babel,但我不确定它是否可以在文档的某些区域内用作次要模式。如果你在组织名单上询问,很可能有人可以告诉你如何获得你想要的行为。

答案 1 :(得分:0)

您可能想看一下SRecode,它是CEDET的一部分,也与Emacs合并:

http://cedet.sourceforge.net/srecode.shtml

它更专注于代码生成,但也许您可以根据自己的需求进行调整?

答案 2 :(得分:0)

正如sanityinc所说,这绝对是org babel的用途。它已经支持R,lisp,python,latex等多种语言。有关org babel的更多信息,请查看here