如何在 Emacs 中找到名称中包含“目录”的所有变量?
问问题
158 次
2 回答
4
M-x apropos-variable RET directory
于 2013-03-05T17:12:44.207 回答
1
如果您只想查找包含字符串的所有变量,请查看正确答案。在这里,我在表单中创建了对列表(<variable> . <value>)
。
使用功能说明
mapatoms
是一个 map 样式的函数,用于操作obarray
, 包含 Emacs 使用的所有符号的变量。prin1-to-string
返回一个带有对象打印表示的字符串。string-match
在字符串中查找正则表达式,如果未找到则返回 index 或 nil。push
将元素就地插入列表的头部。remove-if
相当于倒置滤波器mapcar
是一个普通的地图函数boundp
如果变量的值不为 void,则返回 t。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)))
参考
于 2013-03-05T16:57:12.353 回答