为什么Python文档字符串中的撇号会破坏Emacs语法高亮?
我在Ubuntu 9.04上使用GNU Emacs 22.2.1。
当我在emacs中编辑Python代码时,如果文档字符串里有一个撇号,emacs就会把后面的所有代码都当成注释来高亮显示,直到再出现一个撇号。这真让人烦!
换句话说,如果我的文档字符串是这样的:
''' This docstring has an apostrophe ' '''
那么后面的所有代码都会被高亮显示为注释,而注释却被当成代码高亮。
我可以通过转义文档字符串来避免这个问题,像这样:
''' This docstring has an escaped apostrophe \' '''
这样高亮就正常了,但这样看起来对我团队里的其他开发者来说就显得很奇怪,也不必要,他们还会嘲笑我用emacs,因为“它处理不了撇号”。;)
所以,有人知道怎么让emacs在这方面表现得更好吗?
谢谢,
Josh
2 个回答
这可能是emacs的一个bug,但也可能是故意这样设计的。如果你像我一样在文档字符串里插入doctests来解释API,我甚至希望在文档字符串中能有完整的Python语法高亮显示。
不过这很可能是个bug……(可能emacs的语法高亮只关注单引号和双引号,而忽略了三重单引号和三重双引号)。如果真是这样的话,你应该在你的例子中使用三重双引号,而不是三重单引号(据我所知,大多数用户在文档字符串中使用三重双引号),这样就不会有这个问题了。
在GNU Emacs 23.2.1版本中,这个似乎可以正常工作。如果升级不太现实,你可以尝试从Emacs 23的源代码中复制一下python.el
文件,或者只复制其中相关的部分(比如python-quote-syntax、python-font-lock-syntactic-keywords,还有使用这些的代码,我对Elisp不太熟悉,所以不太确定)。
不过,savannah.gnu.org的bzr浏览器现在无法使用,所以我不能直接给你指向代码的位置,你需要自己下载。可以去看看这个链接:http://www.gnu.org/software/emacs/