在Python模式下,如果我将点放在下面函数定义中的x
参数
def f(x):
# ^------ point here
print x
在函数体中使用x
会以黄色突出显示。
答案 0 :(得分:3)
我不会在主要模式下实现这样的功能。尝试基于通用Emacs接口(例如语法表)支持尽可能多的主要模式的通用次要模式更适合,并且毫不奇怪,有人已经编写了这样的模式:highlight-symbol。
使用此程序包以及init.el
中的以下代码,Emacs将在点下突出显示符号的所有匹配项(例如变量,函数,类):
(add-hook 'prog-mode-hook #'highlight-symbol-mode)
此软件包还提供了许多其他实用程序来处理点下的符号,例如highlight-symbol-nav-mode
,它允许您跳转到带有C-n
的点下一个和上一个符号。分别为C-p
。看看源代码,了解它的功能。
答案 1 :(得分:1)
(require 'hi-lock)
(defvar args-highlighted-p nil)
(defvar args-highlighted-regexp "\_<.+\_>")
(defun highlight-args ()
"With cursor at function's argument, highlight args in body.
When already highlighted, un-highlight. "
(interactive)
(save-excursion
(if args-highlighted-p
(progn
(setq args-highlighted-p nil)
(hi-lock-unface-buffer args-highlighted-regexp))
(let ((erg (prin1-to-string (symbol-at-point)))
(end (funcall end-of-defun-function)))
(if
erg
(progn
(setq args-highlighted-p t)
(setq args-highlighted-regexp (concat "\\_<" erg "\\_>"))
(hi-lock-face-symbol-at-point)
(while
(re-search-forward "\_<erg\_>" nil t end)
(hi-lock-face-symbol-at-point))))))))
答案 2 :(得分:1)
库highlight.el
中的命令hlt-highlight-symbol
可以满足您的需求。 (另请参阅选项hlt-auto-faces-flag
。)它执行库highlight-symbol
的功能(包括事件之间的导航)等。请参阅Highlight library。
另外,Emacs 24.4(即当前开发快照),命令hi-lock-face-symbol-at-point
做你想要的,我想(不同)。
答案 3 :(得分:0)
不确定该模式是如何具体做到这一点的,但here&#39; sa highlight-tags
次要模式我之前作为思考练习编写了类似的匹配sgml
标签
它并没有很好地确定要点击哪些标签,但无论如何,相关部分将是highlight-tags-update
/ hide
/ show
。请记住,由于sgml
标记只有一个匹配的标记,因此我只为缓冲区提供了一对全局叠加层。您的用例可能会有更多亮点,因此您需要保留其中的列表。
你的抽象方式是:
word-at-point
python-nav-*-block
命令和search-forward
的某种组合)start
/ end
overlay
/ start
对end
创建一个新make-overlay
,并返回这些重叠列表。然后你需要一个能够获取上述输出并将其存储在某个地方的函数,以便以后可以(mapcar #'delete-overlay overlays)
。
最后,您需要向hook
添加一个post-command-hook
来运行一个功能,以删除旧的叠加层并生成新的叠加层。