使用 emacs 的代码模板

使用 emacs 的代码模板

如何配置emacs生成一些代码框架?

例如,对于 C 文件:

#include <stdio.h>
#include <stdlib.h>

int main (int argc, char **argv) {

    return EXIT_SUCCESS;
}

或者 Python 中更动态的东西:

#!<insert result of `which python` here>

def main():

if __name__ == "__main__":
    main()

我想定义两种插入模板的模式:

  • 创建一个函数insert-template(或其他东西),将其绑定到特定的组合键 ( C-c C-t),该组合键将根据主要模式插入正确的模板。

  • 创建一个选项以在创建文件时自动插入模板,通过文件名后缀检测正确的类型(类似于检测主要模式的方式)。该选项应该可以在文件中轻松设置打开/关闭.emacs

理想情况下,我想避免使用第三方模块/包。但我并不完全反对。

答案1

请检查亚斯尼佩特。它是一个很棒的 Emacs 模板系统,可以轻松安装并根据您的需要进行定制。另外,请检查文档(包含如何使用部分和视频演示)。

答案2

如果第三方 emacs 模式已经存在,为什么还要避免它们呢?这EmacsWiki 有一个很长的列表可以解决您的问题。其中,abbrev-mode已经伴随我们数十年了。它可以被非常温和地滥用来完成您需要的事情。auto-insert-mode更好,并且是 emacs 的一部分。

我怀疑您可能需要编写一点 emacs Lisp 来搜索 Python(或其他任何)解释器二进制文件的路径。

甚至还有功能强大的选项(查看 EmascWiki 页面 - 一定有一个可以满足您的所有需求)

答案3

为了在文件创建时自动插入这些,我认为您需要将挂钩添加到适当的模式。例如

(add-hook 'python-mode-hook '(lambda () (when (empty-buffer?) (insert-python-template))))

(defun empty-buffer? () (= (buffer-end 1) (buffer-end -1)))

(defun insert-python-template ()
  (interactive)
  (insert "Template stuff goes here"))

现在,每当您在 中打开一个新缓冲区时python-mode,您都会自动使用该模板填充它。

如果您对第三方模块开放,并且想要将模板/部分模板添加到开放缓冲区,请查看yasnippet小模式。我自己实际上还没有抽出时间使用它,但我不断听到有关它的好消息。

答案4

您可以使用内置的auto-insert-mode.将以下内容添加到您的.emacs文件中:

(auto-insert-mode)
(setq auto-insert-directory "~/.emacs.d/templates/")  ;; trailing slash IMPORTANT
(define-auto-insert "\.py" "python-template.py")

然后将模板内容放入python-template.py目录中~/.emacs.d/templates/

如果您不想每次都提示插入,那么您还可以将以下行添加到文件中.emacs

(setq auto-insert-query nil) ;; don't prompt before template insertion

相关内容