考虑到拥有GNU Emacs模板系统的所有可能解决方案,人们今天使用什么?我仍然在使用骨架模式,但是当我在这里和那里阅读时,我们一定很少这样做。
你在用什么?为什么? (也许我可以切换到更受欢迎的工具)。
例如,给定此片段:
(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
_)
(学分:http://www.foldr.org/~michaelw/log/programming/lisp/defpackage-skeleton)
哪个(现代)模板模式可以做同样的事情(以及如何;))?
干杯
答案 0 :(得分:5)
我使用yasnippet。
在我的emacs中,我有这个:
(require 'yasnippet-bundle)
在我想要使用片段的每个模式的钩子中(比如我的c-mode hook等),我有这个:
(yas/minor-mode-on)
我使用的“静态”代码段在我使用的目录结构中可用,这里:
http://cheeso.members.winisp.net/srcview.aspx?dir=emacs&file=snippets.zip
当任何代码段发生变化时,您需要创建上面提到的bundle .el文件。这样做:
(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")
就是这样!
然后,当我在C#文件中并输入for<TAB>
时,我得到一个带有for循环的模板。等等。
我还将yasnippet与动态代码段模板结合使用。一个C#代码完成模块我用一个动态构造的字符串调用yas/expand-snippet
来定义要扩展的模板。
所以,你可以输入
MyType.Method(<COMPLETE>
...其中<COMPLETE>
是代码完成键,代码完成模块在MyType.Method上执行查找(然后构建一个选项菜单,然后弹出它。当用户从菜单中选择一个选项,代码完成模块构建模板,包含所选方法的每个参数的字段。然后调用yas/expand-snippet
并将该模板注入缓冲区,就像它有在动态生成的模板中,方法的每个参数都得到一个“typeover”字段,我只需填写它,在字段中进行选项卡。非常好。
这种“动态代码段”的想法适用于任何代码完成引擎。您只需要一种方法来映射方法或函数签名,如下所示:
function(int arg1, string arg2, char arg3)
到yasnippet模板定义字符串,如下所示:
function(${1:int arg1}, ${2:string arg2}, ${3:char arg3})
这是一个非常微不足道的elisp。
答案 1 :(得分:4)
我没有太多使用骨架模式,但我在Ruby和C编码时使用YASnippet。它非常有用,但我怀疑骨架模式功能强大得多。
答案 2 :(得分:4)
为了记录:即使再过了7年,我仍然对骷髅很满意。我的init文件中有很多可用的文件:https://github.com/ska2342/ska-init-files/blob/master/dot.emacs.d/init.el
答案 3 :(得分:1)
emacs wiki将Yasnippet列为骨架的替代品。与yasnippet一起提供的片段非常好,但你应该写自己的片段,因为真正的力量就在那里。