2013-03-05 56 views

回答

4

M-x apropos-variable RET directory

+1

但需注意的这个功能的prefix参数的影响。请参阅'C-h f apropos-variable'和'C-h f user-variable-p'(后者是一个变量需要匹配的谓词,以便默认显示)。 – phils 2013-03-05 21:45:15

1

如果您只是想查找包含字符串的所有变量,请查看correct答案。在这里,我以(<variable> . <value>)的形式创建了对的列表。

的功能说明使用

  • mapatoms是一个地图式的函数,在obarray操作,包含emacs使用所有符号变量。
  • prin1-to-string返回一个带有对象的打印表示的字符串。
  • string-match在字符串中找到正则表达式,如果找不到则返回索引或零。
  • push在原地插入元素到列表的头部。
  • remove-if相当于倒置filter
  • mapcar是一个普通的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))) 

参考