6

Emacsのlispモードですべての関数の名前を強調表示する方法は? 太字にしたい。

(つまり、最初のから までのすべての単語spaceです。次のような例外は気にしないでください(a . b)

GitHub と同じように:

ここに画像の説明を入力

4

2 に答える 2

6

これを使って:

(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 と同じようにバインディングを台無しにします。しかし、それはあなたが求めたものですよね :)?

于 2013-08-17T13:35:47.720 に答える
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

アップデート - -

このためのマイナー モード コマンドとライブラリを作成しました。

定義済みの Emacs-Lisp シンボル (関数と変数、関数のみ、または変数のみ) を強調表示できます。または、定義されていないシンボルのみを強調表示することもできます。

于 2013-08-17T20:33:00.837 に答える