2013-08-17 89 views

回答

5

使用此:

(defface font-lock-func-face 
    '((nil (:foreground "#7F0055" :weight bold)) 
     (t (:bold t :italic t))) 
    "Font Lock mode face used for function calls." 
    :group 'font-lock-highlighting-faces) 

(font-lock-add-keywords 
'emacs-lisp-mode 
'(("(\\s-*\\(\\_<\\(?:\\sw\\|\\s_\\)+\\)\\_>" 
    1 'font-lock-func-face))) 

一件有趣的事情:这个食堂了let绑定,就像Github上。 但这就是你要求的,正确的:)?

+1

谢谢!现在我明白'\\(... \\)'是重点。但是我想知道那个“1”是什么意思? – kuanyui

+1

1表示“第一个捕获组”,2表示第二个捕获组,如果有的话。 0意味着整场比赛 –

+0

更好:请删除变量,并离开'defface'。脸部变量已过时。您可能想要使用内置的'font-lock-function-name-face'来代替。正则表达式无法捕获一些相当常见的函数名称(即'string =','<=','+'或'foo/bar')。 '“(\\ s - * \\(\\ _ <\\(?:\\ sw \\ | \\ s _ \\)+ \\)\\ _>”'给出了更完整的覆盖范围 – lunaryorn

6

下面的代码突出了已知Emacs-Lisp函数的名称。

请注意,即使某些给定函数名称的出现不代表函数,也会这样做。例如,该名称可能被用作变量名称。在实践中不是一个大问题,但很好知道。

;; `setq' is a variable here, but it is highlighted anyway. 
(let ((setq (foobar)))...) 

要打开中的Emacs Lisp的模式会自动高亮,做到这一点:

(font-lock-add-keywords 'emacs-lisp-mode 
         '((my-fl . 'font-lock-constant-face)) ; Or whatever face you want.       'APPEND) 

(defun my-fl (_limit) 
    (let ((opoint (point)) 
     (found nil)) 
    (with-syntax-table emacs-lisp-mode-syntax-table 
     (while (not found) 
     (cond ((condition-case() 
        (save-excursion 
        (skip-chars-forward "'") 
        (setq opoint (point)) 
        (let ((obj (read (current-buffer)))) 
         (and (symbolp obj) (fboundp obj) 
          (progn (set-match-data (list opoint (point))) t)))) 
       (error nil)) 
       (forward-sexp 1) 
       (setq opoint (point) 
        found t)) 
       (t 
       (if (looking-at "\\(\\sw\\|\\s_\\)") 
        (forward-sexp 1) 
       (forward-char 1))))) 
     found))) 

注意:如果你想看到的只是这个高亮的效果,那么首先这样做是一个Emacs -Lisp模式缓冲区,摆脱其他的Emacs Lisp的字体锁突出:

M-: (setq font-lock-keywords ()) RET 

UPDATE ---

我创造了这个小-mode命令和库:

它可以让你突显定义的Emacs Lisp的符号:函数和变量,只有函数,或者只有变量。或者,您可以仅突出显示已知的已定义符号而不是

+2

我可能误读了的代码,但可以' t时的整个'条件case'以'(事 - 在点“符号)来代替'? – lunaryorn

+0

也许是,也许不是。;-)见'函数称为-AT-point',例如。 – Drew

相关问题