2009-01-11 88 views
15

我寫了很多短暴殄天物程序,而且我發現自己反覆做的事情之一就是打字了類似的代碼啓動任何Emacs的緩衝區.c擴展與模板

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

int main(void){ 

} 

爲了節省一些肌腱命中我想知道是否有可能插入一個簡單的模板上面,每當我創建一個擴展名爲.c的緩衝區。

回答

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

你好湯姆:謝謝你。我現在就試過了。但我沒有得到#include - 我得到了其他的東西。有任何想法嗎? – 2012-02-01 04:01:12

+0

是的,和我一樣,我沒有#includes – pranavk 2013-04-16 16:59:17

4

下福nction將要求一個文件名,然後插入一個文件並改爲c模式。唯一的問題是,你必須調用這個函數來創建緩衝區,而不是你正常的方式。

(defun defaultCtemplate(cfilename) 
    (interactive "sFilename: ") 
    (switch-to-buffer (generate-new-buffer cfilename)) 
    (insert-file-contents "~/Desktop/test.c") 
    (c-mode) 
) 

PS感謝您的問題,現在我知道如何爲自己做這個:)

10

我用template.el從http://emacs-template.sourceforge.net/

基本上,我創建了一個叫〜/ .templates文件/TEMPLATE.c,然後插入到我的.c文件中。如果您不只是想將文本轉儲到緩衝區中,您還可以使用特殊標記和任意lisp表達式。我使用這個特性,以便Perl模塊在命名爲lib/Foo/Bar.pm時以「package Foo :: Bar」開頭。非常便利。

0

我使用following code從模板創建文件。有幾種方案,這與實際的文件名替代品等

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") 
4

您也可以使用YASnippet template system沒對於Emacs,它只有一個名爲main的內置模板。因此,在編寫代碼時,只需鍵入main,點擊TAB,然後將其展開爲您想要的形式。 (您可以隨時編寫自己的片段模板。)

0

我使用Defaultcontent.elYASnippet.el的組合。前者使用默認內容填充全新文件。後者是一種輕量級的代碼宏宏。鍵入「for」並點擊TAB,並插入for循環的框架。等等你可以很容易地定義你自己的片段。 「swi TAB」爲您提供完整的切換語句。等等。

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") 

改變目錄和文件名後,它完美的作品。

0

yasnippet善於在您的文件中展開模板,並且非常容易創建您的代碼段。 自動插入擅長用模板填充新文件,但編寫自己的模板很難。有一個偉大的軟件包yatemplate彌合了YASnippet和自動插入模式之間的差距,我可以用YASnippet編寫自動插入規則。