5

Emacs では、次のような emacs lisp で引用符で囲まれた記号を希望'blahし、それらを別の色で表示します。font-lockモードを使用してこれを行うにはどうすればよいですか?

4

2 に答える 2

5

試す:

(font-lock-add-keywords 'emacs-lisp-mode
                        '(("'[-a-zA-Z_][-a-zA-Z0-9_]*\\>" 0 'font-lock-constant-face)))

または (引用に色を付けたくない場合):

(font-lock-add-keywords 'emacs-lisp-mode
                        '(("'\\([-a-zA-Z_][-a-zA-Z0-9_]*\\)\\>" 1 'font-lock-constant-face)))

コメントや文字列は以前に色付けされていたため、これは色付けされず、font-lock (デフォルト) は色付けを変更しません。

于 2012-12-17T14:42:46.073 に答える
1

次のコードは、引用自体とそれに続く記号の構文の強調表示を有効にします。必要に応じて、2 つの顔をカスタマイズすることもできます。また、 との違い'(hello world)(hello world)簡単に見つけたいと思うかもしれません。そのためには、引用符を強調表示するだけでは不十分な場合があるため、コードのコメント アウトされた部分は、引用符に続く開き括弧を強調表示するためのものです。ネストされた括弧を異なる色で強調表示する他のパッケージと互換性がないと思うため、それらはコメントアウトされており、それらのパッケージのいずれかを使用している可能性が非常に高いです。

(defface my-lisp-quoted-symbol-face
  '((t :inherit font-lock-constant-face))
  "Face for Lisp quoted symbols.")

(defface my-lisp-quote-face
  '((t :inherit warning))
  "Face for Lisp quotes.")

;; (defface my-lisp-quoted-open-paren-face
;;   '((t :weight bold
;;        :inherit my-lisp-quoted-symbol-face))
;;   "Face for Lisp quoted open paren.")

(defvar my--lisp-quote-regexp
  (rx (group "'")
      (or symbol-start
          (group (syntax open-parenthesis)))))

(defvar my--lisp-quoted-symbol-regexp
  (rx "'" (group (+ (or (syntax symbol)
                        (syntax word))))))

(dolist (mode (list 'emacs-lisp-mode
                    'lisp-mode))
  (font-lock-add-keywords mode
                          `((,my--lisp-quote-regexp
                             (1 'my-lisp-quote-face)
                             ;; (2 'my-lisp-quoted-open-paren-face nil t)
                             )
                            (,my--lisp-quoted-symbol-regexp
                             1 'my-lisp-quoted-symbol-face))))

defface と rx を使用すると、コードがより冗長になります。defface の利点は、顔を簡単にカスタマイズできることです。rx の利点は、このコードを他の目的で変更しようとする場合に得られます (たとえば、逆引用符も処理するようにしたい場合など)。

于 2013-09-02T12:58:00.840 に答える