Emacs Lisp功能指南?

时间:2009-02-18 02:35:11

标签: emacs elisp

我已经使用Emacs超过三年了但是在Lisp中编写甚至小函数还需要几天时间。我查看了GNU Emacs Lisp Reference Manual,但它的结构与JavaDoc完全相反,不是从函数到描述,反之亦然。

什么能让我的生活更轻松的是某种类似JavaDoc的小文档,其中包含最常用的Emacs内部函数以及它们的快速描述。

    (point) - returns current position in buffer
    (save-excursion (p)) - saves current position in buffer before 
                           executing (p) and restores it afterward.

有谁知道我在哪里可以找到类似的东西?

12 个答案:

答案 0 :(得分:13)

您是否尝试过emacs中的内置手册?打开任何lisp缓冲区(或lisp模式下的任何缓冲区),将您的点移动到任何函数或变量,然后点击C-h f(用于函数)或C-h 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,但是为了查找功能文档,这是一个很好的入门者。如果您发现内置手册不可理解(有时会发生),那么您可以将该功能谷歌;)

答案 1 :(得分:12)

此网站包含一些可能有用的emacs lisp摘要信息:http://xahlee.org/emacs/elisp.html

特别要查看该页面上的这些链接:Basic Text-editing FunctionsEmacs Lisp Idioms Batch Text Processing

答案 2 :(得分:11)

GNU Introduction to emacs lisp肯定比参考手册更容易接受。

答案 3 :(得分:9)

我想补充几点:

  • M-x apropos - 搜索函数和变量以查找您指定的任何字符串(例如目录)。请注意,这与C-h a略有不同,% g只能找到交互式功能

  • 找到一段类似的代码并复制它 - 你可以通过查看已经完成的工作来学习很多关于如何做事的知识。如果你想看一个特定的函数,一个好的方法是访问dired中的主lisp源目录(例如d:/ product / emacs / lisp或/ usr / share / lib / emacs / lisp)并做C-h f将查找所有查找您键入的字符串的文件。打开该文件,看看其他人用它做了什么。

  • C-h v和{{1}} - 正如其他人提到的那样,您可以打开源,定位函数或变量,然后获取文档。

  • 查看Emacs wiki,其中包含Emacs lisp模块的垃圾邮件,供您细读。

答案 4 :(得分:8)

我认为你采取了错误的做法。学习的时候 编程语言和一组库(统称为“Emacs Lisp“),你需要在微观和宏观尺度上接近它。 在开始编写软件之前,您需要了解自己的工具 有空的。这就是Emacs Lisp手册旨在教育的内容 你继续。你真的需要坐下来阅读整个事情。那 你知道Emacs提供什么功能的方式。

执行此操作后,您需要“微观级别”信息。有 许多来源提供了这一点。如果你有一个大概的想法 你需要做什么(“使用缓冲区”),然后是Lisp参考 是一个了解你需要知道什么的好地方。如果你知道的话 有一个功能可以做你想要的,但不太记得 该名称,然后M-x aproposC-u C-h a)将帮助您搜索 文档。如果你知道你想要使用什么功能,但不知道 记住它是如何工作的,然后M-x describe-functionC-h f) 会为你排序。

所以,无论如何,关键是学习Emacs Lisp,然后让Emacs帮助你 细节。功能列表不会教你太多。

(哦,还有一件事 - 你应该熟悉Common Lisp的。大多数Emacs库使用cl,这是有用的CL 在Emacs Lisp中实现的函数。 loopdestructuring-binddefun*等等都在那里,它们非常有用。)

答案 5 :(得分:2)

答案 6 :(得分:2)

为了理解其中的内容,通常看一下源代码是很有用的。

http://repo.or.cz/w/elbb.git/blob/HEAD:/code/Go-to-Emacs-Lisp-Definition.el

答案 7 :(得分:1)

如果你愿意花钱买一棵枯树,我建议

Learning GNU Emacs
(来源:oreilly.com

答案 8 :(得分:1)

你试过<f1> f吗?它必然是describe-functionpoint的示例:

point is a built-in function in C source code.
(point)

Return value of point, as an integer.
Beginning of buffer is position (point-min).

[back]

与大多数Lisp系统一样,Emacs有一个集成的文档工具!

  • 任何Lisp函数或变量都可以声明一个可选的文档字符串。
  • 几乎所有标准命令或函数都声明了一个有用的文档字符串。
  • Emacs(与大多数Lisp系统一样)允许您随时显示任何函数或变量(<f1> f<f1> v)的文档字符串。
  • 显示时,文档字符串是可浏览的,这意味着您可以单击符号以查看其文档字符串,或转到相应函数或变量的源。
  • 只要您评估任何defundefvar,就可以通过describe-functiondescribe-variable获取其文档字符串:此文档还有效!

答案 9 :(得分:1)

M-x find-library RET&lt; library name&gt;是你真正需要的

答案 10 :(得分:0)

在XEmacs中,我也相信Emacs, 按下C-h f,然后选项卡完成的Tab键,此时所有功能,将为您提供编辑器知道的功能列表。

您只需使用光标键并滚动到您想知道的那个,然后按Enter键查看详细信息。

如果您想要的功能列表(包含更多信息)可以提供给您。

此列表是当前可用的所有函数,因此如果您安装了lisp软件包,它将显示这些软件包提供的功能以及本机功能。在我的XEmacs副本中,今天我在列表中有6,586个函数。 Emacs将是类似的。

问题在于并非所有函数都具有使其具有上下文意义的名称(即并非所有菜单变量/函数都包含单词菜单,因此如果仅按名称输入,则会遗漏一些内容。

您可以使用INFO页面(在菜单上)更加局部地查看它们,并获得相同的使用信息。

答案 11 :(得分:0)

下载Emacs的源代码。转到src /文件夹并输入:

  

grep -r DEFUN *

您将获得Emacs的所有原始Lisp函数的列表。