我写了很多短暂的一次性程序,我发现自己反复做的一件事就是键入代码
#include <stdio.h>
#include <stdlib.h>
int main(void){
}
为了保存一些肌腱命中,我想知道每当我创建一个扩展名为.c的缓冲区时,是否可以插入一个简单的模板。
答案 0 :(得分:18)
在.emacs
(define-skeleton c-throwaway
"Throwaway C skeleton"
nil
"#include <stdio.h>\n"
"#include <stdlib.h>\n"
"\n"
"int main(void){\n"
"\n"
"}\n")
和eval(C-x C-e
)它。那会给你一个
插入模板的函数(c-throwaway
)。
要自动插入,您需要激活
auto-insert-mode
。完成此操作后,您可以describe-variable
auto-mode-alist
阅读有关emacs如何打开其中的内容
文件魔术。然后定义auto-insert-alist
以便在您使用时应用它
找到一个新文件。
也许是这样的
(define-auto-insert "\\.\\([Cc]\\|cc\\|cpp\\)\\'" 'c-throwaway)
更多细节:
答案 1 :(得分:10)
我使用http://emacs-template.sourceforge.net/
中的template.el基本上,我创建一个名为〜/ .templates / TEMPLATE.c的文件,然后将其插入到我的.c文件中。如果您不想将文本转储到缓冲区,也可以使用特殊标记和任意lisp表达式。我使用此功能,以便当它们命名为lib / Foo / Bar.pm时,Perl模块以“package Foo :: Bar”开头。非常方便。
答案 2 :(得分:4)
以下函数将询问文件名,然后插入文件并更改为c-mode。唯一的问题是你必须调用这个函数来创建缓冲区,而不是你的正常方式。
(defun defaultCtemplate(cfilename)
(interactive "sFilename: ")
(switch-to-buffer (generate-new-buffer cfilename))
(insert-file-contents "~/Desktop/test.c")
(c-mode)
)
P.S感谢您提出这个问题,现在我知道如何为自己做这件事:)
答案 3 :(得分:4)
您还可以将YASnippet template system用于Emacs,它只有一个名为main
的内置模板。因此,在编写代码时,只需键入main
,然后点击TAB
,它就会将其扩展为您想要的格式。 (并且您始终可以编写自己的代码段模板。)
答案 4 :(得分:1)
这个问题很老,但这可能对某人有所帮助。查看this site,我将此部分复制并粘贴到我的.emacs文件中:
;; automatic insertion of templates
(require 'autoinsert)
(auto-insert-mode) ;;; Adds hook to find-files-hook
(setq auto-insert-directory "~/Documents/Emacs/templates/") ;;; *NOTE* Trailing slash important
;;(setq auto-insert-query nil) ;;; If you don't want to be prompted before insertion
(define-auto-insert "\.tex" "my-latex-template.tex")
(define-auto-insert "\.cpp" "my-cpp-template.cpp")
(define-auto-insert "\.h" "my-cpp-template.h")
更改目录和文件名后,它可以完美运行。
答案 5 :(得分:0)
我使用following code从模板创建文件。有几个模板,它们是实际文件名的替代品等
答案 6 :(得分:0)
我是这样做的(因为我不知道自动插入模式: - )
(require 'tempo)
(setq c-new-buffer-template
'(
"#include <stdio.h>\n"
"#include <stdlib.h>\n"
"\n"
"int main(void){\n"
"\n"
"}\n"
))
(defun my-c-style ()
"My editing style for .c files."
(c-mode)
(if (zerop (buffer-size))
(tempo-template-c-skeleton)))
(setq auto-mode-alist
(cons '("\\.c\\'" . my-c-style) auto-mode-alist))
(tempo-define-template "c-skeleton" c-new-buffer-template
nil
"Insert a skeleton for a .c document")
答案 7 :(得分:0)
我使用Defaultcontent.el和YASnippet.el的组合。前者用默认内容填充全新文件。后者是一种轻量级代码宏的东西。键入“for”并命中TAB并插入for循环的骨架。等等。您可以非常轻松地定义自己的代码段。 “swi TAB”为您提供完整的切换声明。等等。
答案 8 :(得分:0)
yasnippet擅长扩展文件中的模板,并且很容易创建代码段。 自动插入擅长用模板填充新文件,但编写自己的模板很难。有一个很好的包yatemplate填补了YASnippet和自动插入模式之间的空白,我可以用YASnippet编写自动插入规则。