0
如何在Emacs中找到其名称中包含“目录”的所有变量?列出包含正则表达式的所有Emacs变量
如何在Emacs中找到其名称中包含“目录”的所有变量?列出包含正则表达式的所有Emacs变量
M-x apropos-variable RET directory
如果您只是想查找包含字符串的所有变量,请查看correct答案。在这里,我以(<variable> . <value>)
的形式创建了对的列表。
mapatoms
是一个地图式的函数,在obarray
操作,包含emacs使用所有符号变量。prin1-to-string
返回一个带有对象的打印表示的字符串。string-match
在字符串中找到正则表达式,如果找不到则返回索引或零。push
在原地插入元素到列表的头部。remove-if
相当于倒置filtermapcar
是一个普通的map功能boundp
返回吨如果变量的值不是void。symbol-value
返回变量的值。(let ((matching-variables
(let ((result '()))
;; result will contain only variables containing "directory"
(mapatoms (lambda (variable)
(let* ((variable-string (prin1-to-string variable))
(match (string-match "directory" variable-string)))
(if match
(push variable result)))))
result)))
;; returns list of pairs (variable-name . variable-value)
(remove-if #'null
(mapcar (lambda (variable)
(if (boundp variable)
(cons variable (symbol-value variable))
nil))
matching-variables)))
但需注意的这个功能的prefix参数的影响。请参阅'C-h f apropos-variable'和'C-h f user-variable-p'(后者是一个变量需要匹配的谓词,以便默认显示)。 – phils 2013-03-05 21:45:15