2012-03-02 64 views
5

如何使用elisp打印emacs中的所有符號。elisp中的emacs打印符號

使用symbolp 函數可以測試lisp對象是否是符號。但是如何收集所有的符號。

是否可以訪問emacs的符號表?

+0

[如何在emacs中打印所有已定義變量?](http://stackoverflow.com/questions/6493331/how-to-print-all-the-defined-variables-in-emacs) – sanityinc 2012-03-03 09:45:19

回答

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 invokation將採取顯著更多的時間來完成,但你會得到關於符號這樣的詳細信息。

+0

我收到錯誤(void-funtion循環)。我在ubuntu 8.04 64位版本中使用emacs版本22.1.1。另外我檢查了emacs lisp參考手冊,沒有解釋函數循環。我應該不得不安裝獨立包來獲得循環功能。 – 2012-03-02 11:43:51

+0

你需要'(需要'cl'''有'loop',但是emacs22是一個(很?)舊的emacs。您應該考慮使用emacs24或至少emacs23。 – Daimrod 2012-03-02 11:47:38

4

只是爲了完整性,這裏是如何你會列出所有的符號,而無需使用cl包:

進入一個新創建的緩衝區,並鍵入M-:(mapatoms (lambda (s) (insert (symbol-name s) "\n")))RET。這將在緩衝區中插入所有現有符號的名稱,每行一個。