Emacs Python.el 语法高亮问题
我现在在使用版本为0.23.1的python.el插件来写Emacs。发现语法高亮有点问题——任何包含下划线后面接关键字的变量名,都会导致这个关键字被高亮显示。例如,“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 个回答
3
当你说你在用 python-mode 0.23.1 的时候,是指 Emacs 自带的那个版本,还是这个链接里的版本:http://launchpad.net/python-mode?(看起来那个版本是 6.x 之类的)
我问这个的原因是,我无法复现你所看到的情况。在一个空的 Python 编辑窗口里,我插入了
def x ():
a_list =3
然后只有在我删除 "a_" 的时候,"list" 才会被高亮。我用的是 Emacs 自带的版本,还是一个快照版本的 Emacs,所以这可能是造成差异的原因?
顺便提一下,你引用的字体锁定规则在我看来是正确的:也许问题在于你使用的版本里 "_" 没有被设置为符号语法?你可以通过在 Python 编辑窗口里输入
M-: (string (char-syntax ?_))
来检查一下。你应该会看到 "_"(这意味着是符号)。如果你看到的是 "."(标点符号)或者其他奇怪的东西,那可能就是问题所在。