2009-01-11 1 views
15

ich viele kurzen Wegwerf-Programme zu schreiben, und eines der Dinge, die ich mich immer wieder sind die Eingabe aus wieBeginn ein Emacs-Puffer mit einer Erweiterung .c mit einer Vorlage

Code zu tun finden
#include <stdio.h> 
#include <stdlib.h> 

int main(void){ 

} 

Um etwas Sehne zu speichern hits Ich habe mich gefragt, ob es möglich war, oben eine einfache Vorlage einzufügen, wenn ich einen Puffer mit der Erweiterung .c anlege.

Antwort

18

Put somthing wie dies in .emacs

(define-skeleton c-throwaway 
    "Throwaway C skeleton" 
    nil 
    "#include <stdio.h>\n" 
    "#include <stdlib.h>\n" 
    "\n" 
    "int main(void){\n" 
    "\n" 
    "}\n") 

Und eval (C-x C-e) es. Das gibt Ihnen eine Funktion (c-throwaway), die Ihre Vorlage einfügt.

Um dieses Einfügen automatisch zu aktivieren, müssen Sie auto-insert-mode aktivieren. Sobald Sie dies tun, können Sie describe-variable auto-mode-alist lesen und lesen, wie Emacs einige seiner geöffneten Datei Magie. Dann definieren Sie auto-insert-alist, um es anzuwenden, wenn Sie eine neue Datei finden.

Vielleicht so etwas wie dieses

(define-auto-insert "\\.\\([Cc]\\|cc\\|cpp\\)\\'" 'c-throwaway) 

Mehr Detail:

+1

Hallo Tom: Danke dafür. Ich habe es gerade versucht. Aber ich bekomme nicht die # include's - ich bekomme alles andere. Irgendwelche Ideen? –

+0

ja das gleiche mit mir, ich bekomme nicht die #includes – pranavk

+0

Ich denke 'define-skeleton' braucht einen weiteren Parameter, vor dem Skelett Inhalt: eine Eingabeaufforderung für eine Variable' str', die später verwendet werden könnte. Diese Funktionalität ist optional zu benutzen, also sollte man einfach "nil" nach "Throwaway C Skeleton" setzen, sollte man loslegen, wenn ich tatsächlich darauf schreibe. Viel mehr Details unter [SkeletonMode] (http://www.emacswiki.org/emacs/SkeletonMode) auf Emacswiki. – lindes

4

Die folgende fu nction fragt nach einem Dateinamen und fügt dann eine Datei ein und wechselt in den c-Modus. Das einzige Problem ist, dass Sie diese Funktion aufrufen müssen, um den Puffer anstelle Ihrer normalen Art zu erstellen.

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

PS Danke für die Frage, jetzt weiß ich, wie dies für mich zu tun :)

10

I template.el von http://emacs-template.sourceforge.net/

verwenden Grundsätzlich erstelle ich eine Datei ~/.templates genannt /TEMPLATE.c, und dann wird das in meine .c-Dateien eingefügt. Sie können auch spezielle Markup- und beliebige Lisp-Ausdrücke verwenden, wenn Sie nicht nur Text in den Puffer ablegen wollen. Ich benutze dieses Feature, damit Perl-Module mit "Paket Foo :: Bar" beginnen, wenn sie lib/Foo/Bar.pm genannt werden. Sehr praktisch.

0

Ich verwende following code, um Dateien aus Vorlagen zu erstellen. Es gibt mehrere Vorlagen, die Substitute mit den tatsächlichen Dateinamen, etc

0

Hier ist, wie ich es tun (weil ich nicht über Auto-Insert-Modus wusste :-)

(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

Sie auch die YASnippet template system verwenden können für Emacs, die nur eine eingebaute Vorlage namens main hat. Wenn Sie also Ihren Code schreiben, geben Sie einfach main ein, drücken Sie TAB, und es wird auf die gewünschte Form erweitert. (Und Sie können immer eigene Snippet-Vorlagen schreiben.)

+1

Ich bevorzuge diese Methode, auf diese Weise habe ich immer eine makellose Datei zu beginnen, aber ich kann leicht eine Vorlage bei Bedarf auslösen. YASnippet integriert sich auch gut mit Anything, das ist ein weiterer großer Gewinn für mich. –

0

Ich verwende eine Kombination von Defaultcontent.el und YASnippet.el. Ersteres füllt brandneue Dateien mit Standardinhalt. Letzteres ist eine Art leichtgewichtiges Code-Gen-Makro-Ding. Geben Sie "for" ein und drücken Sie TAB und das Skelett einer for-Schleife wird eingefügt. Etc. Sie können Ihre eigenen Snippets ziemlich leicht definieren. "swi TAB" bekommt eine komplette switch-Anweisung. Und so weiter.

1

Diese Frage ist alt, aber das könnte jemandem helfen. Mit Blick auf this site, ich kopiert und eingefügt, diesen Teil in meine .emacs-Datei:

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

Nachdem das Verzeichnis zu ändern und Dateinamen, es funktioniert perfekt.

0

ist gut zu erweitern Vorlage in Ihrer Datei, und ist sehr einfach, Ihre Schnipsel zu erstellen. Auto-Einfügung ist gut, um eine neue Datei mit Vorlage zu füllen, aber schreiben Sie Ihre eigene Vorlage ist schwer. Es gibt ein großartiges Paket yatemplate überbrückt die Lücke zwischen YASnippet und Auto-Einfügemodus, ich kann Auto-Einfüge-Regeln mit YASnippet schreiben.

Verwandte Themen