Emacs Python.el,语法突出显示怪癖

时间:2011-09-02 03:47:35

标签: python emacs syntax-highlighting

我现在正在为Emacs使用python.el版本0.23.1。语法高亮似乎有点偏离 - 任何包含下划线后跟关键字的变量名称都会导致关键字被突出显示。例如,“foo_list”将导致“list”突出显示。

我自己对Emacs-Lisp的理解比任何事情都要多(这不是什么大问题)我该如何解决这个问题。以下是我认为相关代码位于“python.el”的第312-318行。我怀疑问题是“symbol-start”的定义,但我不知道这个名称是指什么。

(defvar python-font-lock-keywords
  ;; Keywords
  `(,(rx symbol-start
         (or "and" "del" "from" "not" "while" "as" "elif" "global" "or" "with"
             "assert" "else" "if" "pass" "yield" "break" "except" "import"
         "print" "class" "exec" "in" "raise" "continue" "finally" "is"
         "return" "def" "for" "lambda" "try" "self")
     symbol-end)

到目前为止,我在Emacs-Lisp中遇到的一件事是,我发现在这样的情况下很难将名称跟回到他们的定义。

提前致谢!

1 个答案:

答案 0 :(得分:3)

当你说你正在使用python-mode 0.23.1时,你的意思是与Emacs或这个捆绑的那个:http://launchpad.net/python-mode? (似乎是版本6.something)

我问的原因是我无法重现你所看到的。在一个空的python缓冲区中,我插入了

def x ():
    a_list =3

和“list”仅在我删除“a_”时突出显示。我正在使用与Emacs捆绑在一起的版本,以及Emacs的快照版本,这可能与众不同?

顺便说一句,你引用的字体锁定规则对我来说是正确的:可能问题是你的版本“_”没有设置为符号语法?您可以输入

进行检查
M-: (string (char-syntax ?_))

在python缓冲区中。你应该得到“_”(这意味着符号)。如果你得到 ”。” (标点符号)或其他奇怪的东西,这可能解释了什么是错误的。