首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >GNU Emacs:框架模式,它还在使用吗?

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

Stack Overflow用户
提问于 2010-05-19 23:07:48
回答 4查看 4.3K关注 0票数 19

考虑到使用GNU Emacs创建模板系统的所有可能的解决方案,人们现在使用的是什么?我仍然在使用框架模式,但当我在这里和那里读到它的时候,我们肯定很少这样做。

你在用什么?为什么?(也许我可以切换到更流行的工具)。

例如,给定以下代码片段:

代码语言:javascript
复制
(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)

哪种(现代)模板模式可以做同样的事情(以及如何做;)?

干杯

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2010-05-23 05:46:06

我使用yasnippet

在我的emacs中,我有:

代码语言:javascript
复制
(require 'yasnippet-bundle)

在我想要使用代码片段的每个模式的钩子中(比如我的c-mode钩子,等等),我有以下内容:

代码语言:javascript
复制
(yas/minor-mode-on)

我使用的“静态”代码片段可以在下面的目录结构中找到:

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

当任何代码片段发生更改时,您需要创建上面提到的捆绑包.el文件。这样做:

代码语言:javascript
复制
(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,该字符串定义了要扩展的模板。

所以,你可以输入

代码语言:javascript
复制
  MyType.Method(<COMPLETE>

...where <COMPLETE>是代码完成键,代码完成模块在MyType.Method(上执行查找,然后构建一个选项菜单并弹出它。当用户从菜单中选择一个选项时,代码完成模块将生成模板,其中包含所选方法的每个参数的字段。然后它调用yas/expand-snippet并将该模板注入到缓冲区中,就像它是一个静态模板一样。在动态生成的模板中,该方法的每个参数都有一个"typeover“字段,我只需填充它,按the键遍历这些字段。相当不错。

这个“动态片段”的想法适用于任何代码完成引擎。您只需要一种从方法或函数签名映射的方法,如下所示:

代码语言:javascript
复制
  function(int arg1, string arg2, char arg3)

yasnippet模板定义字符串,如下所示:

代码语言:javascript
复制
  function(${1:int arg1}, ${2:string arg2}, ${3:char arg3}) 

这是一个相当微不足道的elisp。

票数 6
EN

Stack Overflow用户

发布于 2017-05-24 15:02:56

郑重声明:即使又过了7年,我仍然对骨骼感到非常满意。在我的初始化文件中有很多可用:https://github.com/ska2342/ska-init-files/blob/master/dot.emacs.d/init.el

票数 8
EN

Stack Overflow用户

发布于 2010-05-19 23:24:20

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

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2866759

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档