如何在Emacs中给特定物件上色?

4

我在emacs中编写Django/Python程序,希望像{% comment %} FOO {% endcomment %}这样的内容显示为橙色。

如何设置重要的Django模板标签的颜色?

3个回答

6
你可以使用专门的模式,比如 django-modeMuMaMo
如果你想要一些非常基础的东西,并且假设你正在编辑 html-mode,你可以尝试以下内容:
(defun django-highlight-comments ()
  (interactive "p")
  (highlight-regexp "{%.*?%}" 'hi-orange))
(add-hook 'html-mode-hook 'django-highlight-comments)

(只需将上述内容添加到您的.emacsinit.el中,并评估它或重新启动emacs。)

1
请注意,如果您在编辑时添加了新标签,则需要重新评估函数(M-x django-highlight-comments)以突出显示新标签。将font-lock关键字添加到html-mode似乎是更好的选择。 - polyglot
至少在 Emacs 23 预测试版(23.0.93.1,这是我测试解决方案的地方),_不需要_重新评估。任何像 {% ... %} 这样的完整注释稍后输入也会立即突出显示。但是,我同意您的观点:作为长期解决方案,最好定义关键字或使用“适当”的模式(django、MuMaMo 等)来识别语法。 - Ashutosh Mehra

3
这是我的做法。它比上面的代码更加通用,并且使用内置的字体锁定机制。
(defvar django-tag-face (make-face 'django-tag-face))
(defvar django-variable-face (make-face 'django-variable-face))
(set-face-background 'django-tag-face "Aquamarine")
(set-face-foreground 'django-tag-face "Black")
(set-face-background 'django-variable-face "Plum")
(set-face-foreground 'django-variable-face "Black")


(font-lock-add-keywords
 'html-mode
 '(("\\({%[^%]*%}\\)" 1 django-tag-face prepend)
   ("\\({{[^}]*}}\\)" 1 django-variable-face prepend)))

defvar 是必需的吗?我们能否直接使用 face 符号,例如 https://dev59.com/H0fRa4cB1Zd3GeqP7T2s#756927? - Yoo

1

这里 一些 链接。我在谷歌上找到了它们。看起来没有一个完全完整和“官方”的解决方案,但可能有一些可用的替代品。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接