【问题标题】:Emacs Python.el, Syntax Highlighting QuirksEmacs Python.el,语法高亮怪癖
【发布时间】:2011-09-02 16:11:12
【问题描述】:

我现在正在为 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 中一直在努力解决的一件事是,我发现在这种情况下很难将名称追溯到它们的定义。

提前致谢!

【问题讨论】:

  • 我不知道你的问题的答案,但对于定义这件事,我有几个建议。首先,打开 eldoc-mode,它会为您提供当前函数的参数列表。其次,使用 C-h v 或 C-h f(变量/函数)将点放在您不认识的事物之上。通常他们中的一个会找到一些东西,并且通常有文档或源链接。最后,symbol-start 是“rx”函数使用的一个特殊名称。
  • @Rupert Swarbrick:感谢 Rupert 的反馈。

标签: python emacs syntax-highlighting


【解决方案1】:

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

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

def x ():
    a_list =3

并且“列表”仅在我删除“a_”时突出显示。我正在使用与 Emacs 捆绑在一起的版本,以及 Emacs 的快照版本,所以这可能会有所不同吗?

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

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

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

【讨论】:

  • 我使用的是由 Emacs 社区维护的 python.el,而不是 Python 社区的 python-mode.el。这可能就是区别。当我使用上面的代码时,我确实看到了“_”。
  • 谢谢 Rupert,我刚刚意识到这个问题实际上是由于我的 .emacs 文件中存在一些其他问题,与 python.el 文件无关。
猜你喜欢
  • 2013-11-16
  • 2010-10-26
  • 2011-02-11
  • 1970-01-01
  • 2015-08-08
  • 2010-11-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多