17

我已经使用 Emacs 三年多了,但我仍然需要几天的时间才能在 Lisp 中编写小函数。我浏览了GNU Emacs Lisp 参考手册,但它很大,结构与 JavaDoc 完全相反,不是从函数到描述,而是相反。

让我的生活更轻松的是某种小型 JavaDoc 文档,其中包含最常用的 Emacs 内部函数和快速描述。

    (point) - 返回缓冲区中的当前位置
    (save-excursion (p)) - 将当前位置保存在缓冲区之前
                           执行 (p) 并在之后恢复它。

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

4

12 回答 12

14

您是否尝试过 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,但对于查找函数文档来说,这是一个不错的入门。当您发现内置手册无法理解时(有时确实会发生),那么您就该用谷歌搜索该功能了;)

于 2009-02-18T05:15:28.207 回答
12

这个站点有一些可能有用的 emacs lisp 摘要信息:http: //xahlee.org/emacs/elisp.html

特别是,请查看该页面上的这些链接:Basic Text-editing FunctionsEmacs Lisp IdiomsBatch Text Processing

于 2009-02-18T03:21:46.153 回答
11

emacs lisp的 GNU简介肯定比参考手册更容易理解。

于 2009-02-18T03:34:28.650 回答
10

我要补充几点:

  • 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 模块供您仔细阅读。

于 2009-02-18T13:32:44.080 回答
8

我认为你采取了错误的方法。在学习一门编程语言和一组库(统称为“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-binddefun*在那里,它们非常有用。)

于 2009-02-18T13:39:16.403 回答
2

其他人的好建议——Emacs 帮助系统是你的朋友。此外:

于 2011-09-05T05:54:56.163 回答
2

为了了解发生了什么,查看源代码通常很有用。

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

于 2012-08-16T15:35:01.443 回答
1

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

学习 GNU Emacs
(来源:oreilly.com

于 2009-02-18T03:48:19.197 回答
1

你试过<f1> f吗?它是必然的describe-function。示例point

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)的文档字符串。
  • 显示时,文档字符串是可浏览的,这意味着您可以单击符号查看其文档字符串,或转到相应函数或变量的源。
  • 只要您评估任何defunor defvar,它的文档字符串就可以通过describe-functionor获得describe-variable:这个文档是有效的!
于 2009-02-18T14:14:38.987 回答
1

Mx find-library RET <library name> 是你真正需要的

于 2016-12-16T15:16:56.647 回答
0

在 XEmacs 中,我也相信 Emacs,按 Ch f,然后按 Tab 键完成制表符,此时是所有功能,将为您提供编辑器知道的功能列表。

您只需使用光标键并滚动到您想了解的内容,然后按 Enter 即可查看详细信息。

如果您想要一个功能列表以及更多可用信息,那将提供给您。

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

问题在于,并非所有函数都具有使它们具有上下文意义的名称(即,并非所有菜单变量/函数中都有菜单一词,因此如果仅按名称进行操作,则会错过一些内容。

您可以使用 INFO 页面(在菜单上)查看它们的主题排列,并获得相同的使用信息。

于 2012-05-31T12:24:48.263 回答
0

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

grep -r DEFUN *

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

于 2016-05-17T19:06:09.973 回答