我正在寻找一种自动突出显示符号的方法,可能使用包highlight-symbol.el(
link).
我想知道,有没有办法让所有(setq)的第一个参数自动突出显示?
(setq这个应该突出1)
..以及使用该符号后的所有后续时间/将被使用.
最佳答案 首先,以下代码基于
version 1.2的高亮符号.旧版本缺少函数highlight-symbol-add-symbol.
基本方法是在缓冲区中搜索“(setq”.实际的正则表达式有点复杂,因为它允许空格并处理defvar和defcustom.
(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可能会给你一个想法,但我担心它没有特别记录.