在Emacs中自动突出显示符号

时间:2013-01-10 17:26:56

标签: emacs highlight symbols

我正在寻找一种自动突出显示符号的方法,可能使用包highlight-symbol.ellink)。

我想知道,有没有办法让所有(setq )的第一个参数自动突出显示?

(setq 这应该突出显示 1)

..以及使用该符号后的所有后续时间。

1 个答案:

答案 0 :(得分:2)

首先,以下代码基于highlight-symbol的version 1.2。较旧的版本缺少函数highlight-symbol-add-symbol

基本方法是在缓冲区中搜索“(setq”。实际的正则表达式有点复杂,因为它允许空格并处理defvardefcustom

(defun highlight-all-symbols ()
  (interactive)
  (save-excursion
    (highlight-symbol-mode 1)
    (goto-char (point-min))
    (while (re-search-forward (concat "([ \t\n]*"
                                      "\\_<\\(?:"
                                      "setq\\|defvar\\|defcustom"
                                      "\\)\\_>[ \t\n]*"
                                      "\\(\\_<\\(?:\\sw\\|\\s_\\)+\\_>\\)")
                              nil t)
      (highlight-symbol-add-symbol (concat "\\_<"
                                           (regexp-quote (match-string 1))
                                           "\\_>")))))

您可能希望将代码包含在mode hook

 (add-hook 'emacs-lisp-mode-hook 'highlight-all-symbols)

当然,简单地突出显示使用setq设置的所有符号都不是一个完美的解决方案,因为它忽略了变量名称空间。然而,正确处理这是一项更大的任务,因为它需要解析代码。如果你想要走下那个兔子洞,this可能会给你一个想法,但我担心它没有特别记录。