2010-05-19 8 views
16

alle möglichen Lösungen für ein Vorlagensystem mit GNU Emacs gegeben, was benutzen die Leute heute? Ich benutze immer noch Skelett-Modus, aber wie ich es hier und da gelesen habe, müssen wir wirklich wenige sein, dies zu tun.GNU Emacs: Skelett-Modus, wird es noch verwendet?

Was verwenden Sie und warum? (Vielleicht könnte ich zu einem beliebteren Werkzeug wechseln).

Zum Beispiel gegeben dieser Ausschnitt:

(define-skeleton mwe:cl-defpackage-skeleton 
    "Inserts a Common Lisp DEFPACKAGE skeleton." 
    (skeleton-read "Package: " (if v1 
           (file-name-sans-extension 
            (file-name-nondirectory 
            (buffer-file-name))))) 
    (if (setq v1 (bobp)) ";;; -*- Mode:Lisp; Syntax:ANSI-Common-Lisp;") 
    & (if buffer-file-coding-system 
     (concat " Coding:" 
       (symbol-name 
       (coding-system-get buffer-file-coding-system 
            'mime-charset)))) 
    & " -*-" 
    & \n 
    & \n "(defpackage #:" str 
    \n "(:nicknames" ("Nickname: " " #:" str) & ")" | '(kill-whole-line -1) 
    \n "(:use #:CL" ((slime-read-package-name "USEd package: ") " #:" str) ")" 
    ")" \n 
    \n 
    (if v1 "(in-package #:") & str & ")" & \n & 
    \n 
    _) 

(Credits: http://www.foldr.org/~michaelw/log/programming/lisp/defpackage-skeleton)

des (modern) Template-Modus könnte das gleiche tun (und wie;))?

Prost

Antwort

5

Ich verwende yasnippet.

In meinem Emacs Ich habe dies:

(require 'yasnippet-bundle) 

In meinem Haken für jeden Modus, wo ich will Schnipsel verwenden (wie meine c-Modus Haken, etc.), ich habe dies:

(yas/minor-mode-on) 

der "statische" Schnipsel ich verwende, ist ich in der Verzeichnisstruktur, hier,:

http://cheeso.members.winisp.net/srcview.aspx?dir=emacs&file=snippets.zip

Sie müssen die og .el-Paketdatei einmal erstellen, wenn sich ein Snippet ändert. tun Sie es so:

(require 'yasnippet) 
(yas/compile-bundle 
; the starting point 
"c:/your/path/yasnippet.el" 

; the bundle file to generate 
"c:/your/path/yasnippet-bundle.el" 

; the snippet dir from which to generate the bundle 
"c:/your/path/snippets") 

Das ist es!

Dann, wenn ich in einer C# -Datei bin und for<TAB> eingeben, bekomme ich eine Vorlage mit einer for-Schleife. Und so weiter.


Ich benutze auch yasnippet mit dynamischen Snippet-Vorlagen. Ein C# -Code-Vervollständigungsmodul Ich schrieb Aufrufe yas/expand-snippet mit einer dynamisch erstellten Zeichenfolge, die die Vorlage definiert, um zu erweitern.

Also, Sie

MyType.Method(<COMPLETE> 

geben können ... wo <COMPLETE> den Code-Completion-Schlüssel ist, und das Code-Completion-Modul macht den Nachschlag auf dem MyType.Method (baut dann ein Auswahlmenü Wenn der Benutzer eine Auswahl aus dem Menü auswählt, erstellt das Code-Vervollständigungsmodul die Vorlage, die Felder für jedes der Argumente für die ausgewählte Methode enthält. Dann ruft es yas/expand-snippet auf und diese Vorlage wird in den Puffer eingefügt. so als wäre es eine statische Vorlage gewesen.In der dynamisch erzeugten Vorlage erhält jedes Argument der Methode ein "typeover" -Feld, und ich fülle es einfach aus, indem ich die Felder durchblättere.

Diese "dynamische Snippet" Idee würde mit jeder Code-Completion-Engine funktionieren. Sie müssen nur einen Weg von einer Methode oder Funktion Unterschrift auf der Karte, wie folgt aus:

function(int arg1, string arg2, char arg3) 

auf eine yasnippet Template-Definition-String, der wie folgt aussieht:

function(${1:int arg1}, ${2:string arg2}, ${3:char arg3}) 

Und das ist ein ziemlich trivial Stück elisp.

+1

Ziemlich ordentlich. Ich werde wahrscheinlich Yasnippet versuchen und Sie sollten definitiv einen Screencast machen :) –

+0

Was ist mit dem Screencast?) – egor7

4

Ich habe Skelett-Modus nicht viel verwendet, aber ich YASnippet verwenden, während Codierung in Ruby und C. Es ist ziemlich nützlich, aber ich vermute, Skelett-Modus viel mächtiger ist.

+0

Können Sie ein wenig mit Yasnippet ausarbeiten: Was ist so mächtig an ihnen? Kann es Dinge so komplex wie das Skelett machen? –

+1

Die Website von Yasnippet finden Sie unter http://code.google.com/p/yasnippet/. Es stammt von Textmates Snippets und verwendet eine ähnliche Syntax für Templating. –

+2

Ich weiß nicht, Skelett. Ich benutze Jasnippet. Es ist einfach zu verwenden: Geben Sie einfach die Vorlagen in Textdateien an. Es ist erweiterbar: Ich kann Snippets (Templates) kodieren, die aus reinem Text oder Elisp-Code bestehen. Es ist ein allgemeiner Zweck: Ich kann ein Snippet interaktiv auslösen, oder ich kann Snippets von elisp einbringen - zum Beispiel kann ich aus einem Completion-Paket einen Lookip in eine Symboltabelle machen und dann, abhängig vom Ergebnis, eine dynamisch erstellte Vorlage einfügen enthält die Methodensignatur. Es funktioniert einfach. Hatte nie einen Grund, Skelett zu betrachten. – Cheeso

1

Das Emacs-Wiki listet Yasnippet als möglichen Ersatz für das Skelett auf. Die Snippets, die mit Yasnippet kommen, sind ziemlich gut, aber du solltest wirklich deine eigenen schreiben, da die wahre Macht dort liegt.

2

Für den Rekord: noch weitere 7 Jahre später bin ich immer noch sehr glücklich mit Skeletten. Viele davon sind dort drüben in meinen init-Dateien: https://github.com/ska2342/ska-init-files/blob/master/dot.emacs.d/init.el

+0

Total mit dir auf dem Skelett. Ich habe erst vor kurzem angefangen nach einem Template-System zu suchen und das Skelett sah einfach am einfachsten aus. Es ist pure elisp, es ist offiziell und - in Kombination mit Abkürzungen - ziemlich einfach anzuwenden. Ich weiß nicht, was vor sieben Jahren der Status von Docs war, aber die aktuelleren Emacs-Dokumente über das Skelett machen ihre Arbeit gut. –

Verwandte Themen