Python 如何在Emacs中为某些东西着色?

Python 如何在Emacs中为某些东西着色?,python,django,emacs,syntax-highlighting,Python,Django,Emacs,Syntax Highlighting,我在emacs中编程Django/Python,我希望像{%comment%}FOO{%endcomment%}这样的东西变成橙色 如何为重要的Django模板标记设置一些颜色?。我在谷歌上找到的。对于这个问题,似乎没有一个完全完整的“官方”解决方案,但有许多可能非常有用的替代品可用。您可以使用诸如或之类的专用模式 如果您想要一些非常基本的内容,并且假设您在html模式下编辑,您可以尝试以下操作: (defun django-highlight-comments () (interactiv

我在emacs中编程Django/Python,我希望像{%comment%}FOO{%endcomment%}这样的东西变成橙色


如何为重要的Django模板标记设置一些颜色?

。我在谷歌上找到的。对于这个问题,似乎没有一个完全完整的“官方”解决方案,但有许多可能非常有用的替代品可用。

您可以使用诸如或之类的专用模式

如果您想要一些非常基本的内容,并且假设您在
html模式下编辑,您可以尝试以下操作:

(defun django-highlight-comments ()
  (interactive "p")
  (highlight-regexp "{%.*?%}" 'hi-orange))
(add-hook 'html-mode-hook 'django-highlight-comments)

(只需将上述行添加到
.emacs
init.el
,然后评估它或重新启动emacs即可)。

以下是我要做的。它比上面的代码更通用,并且使用内置的字体锁定机制

(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)))

但是,请注意,如果在编辑时添加了新标记,则需要重新评估函数(M-x django highlight comments)以突出显示新标记。将字体锁定关键字添加到html模式似乎是一个更好的选择。至少在Emacs 23预测试(23.0.93.1,这是我测试解决方案的地方)上,不需要重新评估。稍后输入的任何完整注释(如{%…%})也会立即突出显示。但是,我同意你的观点:作为一个长期的解决方案,定义关键字或使用一个能够识别语法的“适当”模式(django、MuMaMo等)肯定是更好的。是否需要defvar?我们可以直接使用面部符号吗