首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >用elisp宏来编写函数?

用elisp宏来编写函数?
EN

Stack Overflow用户
提问于 2010-03-13 12:21:08
回答 2查看 2.7K关注 0票数 18

我已经编写了几个几乎相同的函数,除了它们的名称。例如:

代码语言:javascript
复制
; x is name, such as function/paragraph/line/etc.
(defun my-x-function
 (interactive)
 (mark-x) (do-more-stuff) (modify-x))

有没有办法自动生成这样的函数?我感觉这就是宏的作用,但我不确定如何使用它们。任何帮助,也许包括一个小的例子将是伟大的。

谢谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-03-13 13:00:23

是的,这正是宏的作用所在。下面是一个简单的宏,它根据您指定的模式构建函数:

代码语言:javascript
复制
(defmacro make-my-function (name)
  (list 'defun (intern (format "my-%s-function" name)) ()
        (list 'interactive)
        (list (intern (format "mark-%s" name)))
        (list 'do-more-stuff)
        (list (intern (format "modify-%s" name)))))

您可以将此宏复制到Emacs中的*scratch*缓冲区,并对其进行求值,然后检查其工作方式是否如下:

代码语言:javascript
复制
(make-my-function x) ; type control-J here
my-x-function ; <-- Emacs's output
(symbol-function 'my-x-function) ; type control-J here
(lambda nil (interactive) (mark-x) (do-more-stuff) (modify-x)) ; <-- Emacs's output

更常见的情况是使用backquote工具来更简洁地编写宏,但所有宏的工作方式基本上都与上面的示例相同。

票数 22
EN

Stack Overflow用户

发布于 2010-03-17 21:37:31

宏可以做到这一点,但是有很多模板模块可以让emacs完成类似的工作。我使用一种名为yasnippet.el的东西来快速生成代码。例如,在一个C源文件中,如果我输入for<TAB>,就会得到一个For循环模板;它允许我填充模板,设置变量名、限制和内部循环内容。

看起来像这样:

您可以为您喜欢的任何内容设置模板。函数定义、if语句、switch语句等等。为不同的模式设置不同的模板。C中for循环的模板与C#中for循环的模板不同,以此类推。非常方便。

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

https://stackoverflow.com/questions/2437254

复制
相关文章

相似问题

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