GNU Emacs:骨架模式,它还在使用吗?

GNU Emacs:骨架模式,它还在使用吗?,emacs,editor,Emacs,Editor,考虑到所有使用GNU Emacs的模板系统的可能解决方案,人们现在使用什么?我仍然在使用骨架模式,但正如我在这里和那里读到的,我们必须真正很少这样做 你在用什么?为什么?(也许我可以换一个更流行的工具) 例如,给定以下代码段: (define-skeleton mwe:cl-defpackage-skeleton "Inserts a Common Lisp DEFPACKAGE skeleton." (skeleton-read "Package: " (if v1

考虑到所有使用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
  _)
(学分:)

哪种(现代)模板模式可以实现相同的功能(以及如何实现)


干杯

我没有太多使用骨架模式,但我在用Ruby和C编写代码时使用了YASnippet。它非常有用,但我怀疑骨架模式更强大。

emacs wiki将YASnippet列为骨架的可能替代品。yasnippet附带的代码片段非常好,但是你应该自己编写,因为真正的力量就在那里。

我使用

在我的emacs中,我有以下内容:

(require 'yasnippet-bundle)
在我希望使用代码片段的每个模式的钩子中(如我的c模式钩子等),我有以下内容:

(yas/minor-mode-on)
我使用的“静态”代码段在我使用的目录结构中可用,如下所示:

当任何代码段发生更改时,您需要创建上面提到的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
时,我会得到一个带有for循环的模板。等等


我还将yasnippet与动态代码段模板一起使用。我编写的C#代码完成模块使用一个动态构造的字符串调用
yas/expand snippet
,该字符串定义了要展开的模板

所以,你可以打字

  MyType.Method(<COMPLETE>
指向yasnippet模板定义字符串,如下所示:

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

这是一个相当小的elisp片段

记录在案:即使再过7年,我仍然对骷髅非常满意。我的init文件中有很多这样的文件:

你能详细介绍一下yasnippet吗:它们有什么强大之处?它能做像骨架一样复杂的事情吗?Yasnippet网站位于。它源于Textmate的代码片段,并使用类似的语法进行模板化。我使用yasnippet。它很容易使用:只需在文本文件中指定模板。它是可扩展的:我可以编写由纯文本或elisp代码组成的代码片段(模板)。它是通用的:我可以以交互方式触发一个代码段,或者我可以从elisp注入代码段-例如,从一个完成包中,我可以在一个符号表中进行查找,然后根据结果,注入一个包含方法签名的动态创建的模板。它只是工作。从来没有理由去看骷髅。如果yasnippet早些时候是发明者的话,我会同意你的观点:D事实是骷髅更古老,是官方GNU Emacs发行版的一部分。这就是我学习它的原因。《骷髅》最大的缺点是它缺乏文学作品,让人觉得它完全是废弃品——也就是说,几乎没有任何地方提到它,很难分享/询问它。现在,如果yasnippet提供相同的功能,为什么不试试呢?;)@奇索:你的设置在什么地方公开吗?非常好。我可能会给Yasnippet一个尝试,你应该做一个电影放映:)那电影放映呢?)完全和你在一起。我只是最近才开始寻找一个模板系统和骨架只是看起来最简单的。它是纯elisp,是官方的,与abbrevs结合使用,非常容易应用。我不知道七年前文档的状态如何,但是现在更多的关于skeleton的Emacs文档做得很好。
  function(${1:int arg1}, ${2:string arg2}, ${3:char arg3})