在Elisp中打印Emacs的符号

6

如何使用elisp在emacs中打印所有符号。

可以使用symbolp函数测试一个lisp对象是否为符号。但是如何收集所有符号呢?

是否可以访问emacs的符号表?


可能是如何在emacs中打印所有已定义的变量?的重复问题。 - sanityinc
2个回答

6
这是一种实现方式:
(require 'cl)

(loop for x being the symbols
    if (boundp x)
    collect (symbol-name x))

loop是一个Common Lisp宏,也已被移植到Emacs Lisp中。它是cl包的一部分(标准Emacs发行版的一部分),您需要require来使用它。

另一个要考虑的选项可能是:

(apropos "." t)

apropos命令的执行时间会更长,但是这样可以获取更多关于符号的信息。


我遇到了错误(void-function loop)。我正在使用Ubuntu 8.04 64位版本中的Emacs版本22.1.1。我还检查了Emacs Lisp参考手册,但没有找到关于函数loop的说明。我需要安装单独的软件包才能获取loop函数吗? - Talespin_Kit
你需要(require 'cl)来使用loop,然而emacs22是一个(非常?)老的版本。你应该考虑使用emacs24或至少是emacs23。 - Daimrod

4

为了完整起见,这是一个不使用cl包列出所有符号的方法:

创建一个新的缓冲区,然后输入 M-:(mapatoms (lambda (s) (insert (symbol-name s) "\n")))RET。这将在缓冲区中插入所有现有符号的名称,每行一个。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接