如何对特定字符高亮显示?

各位朋友好: 新人真心求教一个问题。我想Emacs能够按照我的意愿去高亮某些词,比如在TXT和org模式下高亮中文“原告”,我参考了几个网页

都得不到想要的效果。 其中一段代码

(font-lock-add-keywords nil '(("\\_<[0-9]+\\_>" . font-lock-warning-face)))

*scratch*中似乎能显示,但到放到init.el里又不行。补充,我使用了zenburn插件。

真心求教,谢谢大家。

可以用 M-x highlight-regexp 原告高亮,如果总是需要在 org-mode 中这么做的话,可以:

(defun my-highlight-some-text ()
  (highlight-regexp "原告"))

(add-hook 'org-mode-hook #'my-highlight-some-text)

谢谢您朋友。得到效果了,但是下一个问题来了,如果有我多个字符,比如(原告|申请人)这是一批,(被告|被申请人)另外一批,怎么样使得两组不同的文字,用上我想要的颜色呢?

highlight-regexp 第一个参数指定 regexp,第二个可选参数指定颜色(默认黄色)

(highlight-regexp REGEXP &optional FACE)

2 个赞

1.我写了这一段很笨的代码,但是没有得到效果(很难看啊,不会用缩进,请原谅)。

(defun my-highlight-some-text ()
  (highlight-regexp "被申请人" font-lock-doc-face)
    )
(defun my-highlight-some-text2 ()
  (highlight-regexp "申请人" font-lock-warning-face)
    )
(add-hook 'org-mode-hook #'my-highlight-some-text)
(add-hook 'org-mode-hook #'my-highlight-some-text2)

我希望达到的效果是

2.再次请朋友您指点一下。 另外,我平常在其他编辑器中使用正则表达式

(申请人|原告|上诉人)

现在在Emacs下改作

\(\(?:上诉人\|原告\|申请人\)\)

似乎也是没有效果,请问应当如何写呢?真心谢谢您。

申请人这个正则表达式必然会匹配到被申请人这个正则表达式的所有匹配,应该要从申请人中排除掉被申请人


(申请人|原告|上诉人)

应该是「或」的意思吧,在 Emacs 下用 \| 是对的:

(with-temp-buffer
  (insert "申请人, 原告, 上诉人)")
  (goto-char 1)
  (count-matches "申请人\\|原告\\|上诉人"))
    ⇒ 3

请问上述的正则表达式应该如何写才对啊?我不太明白您代码的意思,请帮助。

我不清楚你不明白哪一个,你的第一个问是把「申请人」和「被申请人」用不同的颜色高亮,要注意配备前者的时候排除掉后者,比如用 [^被]\(申请人\),之后高亮分组 1,差不多就可以了,需要处理 Buffer 一开头就是「申请人」的话再另外添加一个条 \申请人。这里有个问题是highlight-regexp默认不支持分组,你需要自己写个支持分组的版本出来。第二个问题是匹配申请人原告上诉人,用上诉人|原告|申请人` 是对的,用它来匹配

申请人, 原告, 上诉人

的话,一共会找到三个匹配

(with-temp-buffer
  (insert "申请人, 原告, 上诉人)")
  (goto-char 1)
  (count-matches "申请人\\|原告\\|上诉人"))
    ⇒ 3

注意 Regexp 写成 Emacs Lisp String 的时候不要忘记跳脱 \

真的不会写,在下也不会编程,只会拷贝一点现成的设置来操作。尝试了两个插件:“highlight-symbol”和“highlight.el”,都达到效果或者不太会用。 总之,还是感谢您的帮助。

效果:

3 个赞

@xuchunyang

我这里除了「被」字,「申请人」前面的其它字符也被高亮了。

(goto-char (match-end group)) 改为 (goto-char (+ 1 (match-end group))) 就正常了。

代码已经没什么印象了,只是把原来的代码跑了一下,结果应该是正常的:

hi-lock-set-pattern+ 是完全照搬了 Emacs 自带的 hi-lock-set-pattern(仅仅是添加了一个参数,不清楚我之前为什么没注明),如果 hi-lock-set-pattern+ 在你那里有什么问题的话,可以尝试直接在 hi-lock-set-pattern 的基础上修改。