2010-05-19 9 views
16

teniendo en cuenta todas las soluciones posibles para tener un sistema de plantillas con GNU Emacs, ¿qué usa la gente hoy en día? Todavía estoy usando esqueleto-modo, pero cuando lo leo aquí y allá, debemos ser muy pocos para hacerlo.GNU Emacs: modo esqueleto, ¿todavía se usa?

¿Qué estás usando y por qué? (Tal vez podría cambiar a una herramienta más popular).

Por ejemplo, dado este fragmento:

(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 
    _) 

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

cuales (moderna) el modo de plantilla podría hacer lo mismo (y cómo;))?

Saludos

Respuesta

5

Yo uso yasnippet.

En mis emacs tengo esto:

(require 'yasnippet-bundle) 

En mi gancho para cada modo en el que quiero usar fragmentos (como mi gancho c-mode, etc), tengo esto:

(yas/minor-mode-on) 

los fragmentos "estáticos" que utilizo están disponibles, en la estructura de directorios que utilizo, aquí:

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

Debe crear el archivo .el de paquete mencionado anteriormente, una vez, cuando cambie alguno de los fragmentos. hazlo de esta manera:

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

Eso es todo!

Luego, cuando estoy en un archivo C# y escribo for<TAB>, obtengo una plantilla con un bucle for. Y así.


También uso yasnippet con las plantillas de fragmentos dinámicos. Un módulo de finalización de código C# escribí llamadas yas/expand-snippet con una cadena construida dinámicamente que define la plantilla para expandir.

Por lo tanto, puede escribir

MyType.Method(<COMPLETE> 

... donde <COMPLETE> es la clave de código de finalización, y el módulo de código de finalización hace la búsqueda en el MyType.Method (, a continuación, genera un menú de opciones , y aparece. Cuando el usuario selecciona una opción del menú, el módulo de finalización de código crea la plantilla, que contiene campos para cada uno de los argumentos para el método seleccionado. Luego llama al yas/expand-snippet y esa plantilla se inyecta en el búfer, como si hubiera sido una plantilla estática. En la plantilla generada dinámicamente, cada argumento del método obtiene un campo "typeover", y simplemente lo rellene, tabulando a través de los campos.

Esta idea de "fragmento dinámico" funcionaría con cualquier motor de finalización de código. Sólo se necesita una forma de asignar a un método o una función de firma, así:

function(int arg1, string arg2, char arg3) 

a una cadena de definición de plantilla yasnippet, que se ve así:

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

y eso es una pieza bastante trivial de elisp.

+1

Bastante limpio. Probablemente le daré una oportunidad a Yasnippet y, definitivamente deberías hacer un screencast :) –

+0

¿Qué hay del screencast?) – egor7

4

que no han utilizado el modo de esqueleto mucho, pero yo uso YASnippet mientras que la codificación en Ruby y C. Es bastante útil, pero sospecho modo de esqueleto es mucho más poderoso.

+0

¿Puedes elaborar un poco con yasnippet: qué tiene de poderoso? ¿Puede hacer cosas tan complejas como el esqueleto? –

+1

El sitio web de Yasnippet se encuentra en http://code.google.com/p/yasnippet/. Se deriva de los fragmentos de Textmate y utiliza una sintaxis similar para crear plantillas. –

+2

No sé esqueleto. Yo uso yasnippet. Es fácil de usar: simplemente especifique las plantillas en los archivos de texto. Es extensible: puedo codificar fragmentos (templats) que consisten en texto sin formato o el código elisp. Es de propósito general: puedo desencadenar un fragmento de forma interactiva, o puedo inyectar fragmentos de elisp; por ejemplo, desde un paquete de finalización, puedo buscar en una tabla de símbolos y luego, dependiendo del resultado, inyectar una plantilla creada dinámicamente que contiene la firma del método. Simplemente funciona. Nunca tuve una razón para mirar el esqueleto. – Cheeso

1

La wiki de emacs incluye a Yasnippet como posible sustituto del esqueleto. Los fragmentos que vienen con yasnippet son bastante buenos, pero realmente debes escribir los tuyos, ya que el verdadero poder yace allí.

2

Para el registro: incluso otros 7 años después todavía estoy muy contento con los esqueletos. Muchos de ellos están disponibles allí en mis archivos de inicio: https://github.com/ska2342/ska-init-files/blob/master/dot.emacs.d/init.el

+0

Totalmente contigo en skeleton. Recientemente comencé a buscar un sistema de plantillas y el esqueleto solo se veía lo más simple. Es puro elisp, es oficial y, en combinación con las abreviaturas, es bastante fácil de aplicar. No sé cuál era el estado de los documentos hace siete años, pero los documentos más actuales de Emacs sobre esqueleto hacen bien su trabajo. –