2011-09-02 59 views
3

我现在使用python.el版本0.23.1 for Emacs。语法突出显示有点偏离 - 任何包含下划线后跟关键字的变量名都会导致突出显示关键字。例如,“foo_list”将导致“列表”被突出显示。Emacs Python.el,语法突出怪癖

更多关于我自己对Emacs-Lisp的理解比任何东西(这不是什么大不了的),我该如何去解决这个问题。这里是我认为相关代码在“python.el”第312-318行的地方。我怀疑问题出在“符号开始”的定义上,但我不知道这个名字是指什么。

(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

我不知道你的问题的答案,但对于定义的事情,我有几个建议。首先,打开eldoc-mode,它给出了当前函数的参数列表。其次,使用C-h v或C-h f(变量/函数),在你不认识的事物的顶部指向点。通常他们中的一个会找到一些东西,而且经常有文档或源代码链接。最后,symbol-start是“rx”函数使用的特殊名称。 –

+0

@Rupert Swarbrick:感谢鲁珀特的反馈。 – Ben

回答

3

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

我问的原因是,我不能再现你所看到的。在一个空的蟒蛇缓冲,我插

def x(): 
    a_list =3 

和“名单”也只是强调,当我删除“A_”。我正在使用捆绑Emacs的版本,Emacs的快照版本,所以这可能会有所不同?

顺便说一句,你引用的字体锁定规则看起来对我来说很正确:也许问题是在你的版本中“_”没有设置符号语法?你可以通过键入来检查

M-: (string (char-syntax ?_)) 

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

+0

我使用由Emacs社区维护的python.el,而不是Python社区的python-mode.el。这可能是不同之处。当我使用上面的代码时,我会看到“_”。 – Ben

+0

感谢Rupert,我刚刚意识到这个问题实际上是由于我在我的.emacs文件中有一些其他问题,与python.el文件无关。 – Ben