我已经使用Emacs超过三年了,但是在Lisp中编写甚至小函数还需要几天的时间.我查看了GNU Emacs Lisp参考手册,但它的庞大和结构与JavaDoc完全相反,不是从功能到描述,反之亦然.
什么让我的生活更轻松的是某种类似JavaDoc的小文档,其中包含最常用的Emacs内部函数以及它们的快速描述.
(point) - returns current position in buffer (save-excursion (p)) - saves current position in buffer before executing (p) and restores it afterward.
有谁知道我在哪里可以找到类似的东西?
你有没有尝试过emacs中的内置手册?打开任何lisp缓冲区(或lisp模式下的任何缓冲区),将您的点移动到任何函数或变量,然后点击Ch f(用于函数)或Ch v(用于变量).Emacs将为您提供功能/变量的相当简洁的描述.
例如,(save-excursion)的手动内容是
save-excursion is a special form in `C source code'. (save-excursion &rest BODY) Save point, mark, and current buffer; execute BODY; restore those things. Executes BODY just like `progn'. The values of point, mark and the current buffer are restored even in case of abnormal exit (throw or error). The state of activation of the mark is also restored. This construct does not save `deactivate-mark', and therefore functions that change the buffer will still cause deactivation of the mark at the end of the command. To prevent that, bind `deactivate-mark' with `let'.
好处还在于内置手册可以让您"链接"到函数的源代码和其他可能相关的函数,这样可以很方便地浏览.
当然你不能用这种方式学习lisp,但是为了查找函数文档,这是一个很好的入门者.如果您发现内置手册不可理解(有时确实会发生),那么您可以将该功能谷歌;)
该站点包含一些可能有用的emacs lisp摘要信息:http://xahlee.org/emacs/elisp.html.
特别是,请查看该页面上的这些链接:基本文本编辑功能,Emacs Lisp Idioms和批处理文本处理
对于emacs lisp,GNU 简介肯定比参考手册更容易接近.
我想补充几件事:
M-x apropos
- 搜索函数和变量以查找您指定的任何字符串(例如目录).请注意,这C-h a
与仅发现交互功能略有不同
找到一段类似的代码并复制它 - 你可以通过查看已经完成的工作来学习很多关于如何做事的知识.如果你想看一个特定的函数,一个好的方法是访问dired中的主lisp源目录(例如d:/ product/emacs/lisp或/ usr/share/lib/emacs/lisp)并做% g
这将查找所有文件,查找您键入的任何字符串.打开该文件,看看其他人用它做了什么.
C-h f
并且C-h v
- 正如其他人提到的那样,你可以打开源,定位函数或变量,然后获取文档.
查看Emacs wiki,它包含一些Emacs lisp模块,供您仔细阅读.
我认为你采取了错误的做法.在学习编程语言和一组库(统称为"Emacs Lisp")时,您需要在微观和宏观尺度上进行处理.在开始编写软件之前,您需要知道可用的工具.这就是Emacs Lisp手册旨在教育你的内容.你真的需要坐下来阅读整个事情.这样你就知道了Emacs提供的功能.
完成后,您需要"微观级别"信息.有许多来源提供了这一点.如果你对你需要做什么("使用缓冲区")有一个大概的了解,那么Lisp参考是一个很好的地方,可以找出你需要知道的东西.如果您知道某个功能可以执行您想要的功能,但又不记得名称,那么M-x apropos
(C-u C-h a
)将帮助您搜索文档.如果你知道你想要使用什么功能,但是不记得它是如何工作的,那么M-x describe-function
(C-h f
)会为你排序.
所以无论如何,关键是学习Emacs Lisp,然后让Emacs帮助你了解细节.功能列表不会教你太多.
(哦,还有一两件事-你应该熟悉Common Lisp的大多数的Emacs库使用.cl
,这是在的Emacs Lisp实现有用的CL功能. loop
,destructuring-bind
,
defun*
,等等都在那里,他们是非常有帮助的.)