如何更改 Python 文档字符串的 Emacs 字体?
Posted
技术标签:
【中文标题】如何更改 Python 文档字符串的 Emacs 字体?【英文标题】:How do I change Emacs's font face for Python docstrings? 【发布时间】:2011-07-05 01:04:17 【问题描述】:我刚刚开始学习 Python 并使用 Emacs 作为我的编辑器。目前,Emacs 对普通字符串(单引号)和文档字符串(三引号)使用相同的颜色。我希望文档字符串是不同的颜色,所以我使用“选项->自定义 Emacs”菜单选项将“font-lock-doc-face”更改为新颜色并保存更改。然而,Emacs 继续保持文档字符串与普通字符串相同的颜色。更改普通字符串的颜色也会将更改应用到文档字符串。
Emacs 似乎将文档字符串和普通字符串视为相同。有没有办法让 Emacs 与普通字符串分开正确地查找和着色 Python 文档字符串?
编辑:我正在使用具有默认 Python 模式设置的 Emacs 23.1.1(Kubuntu 10.10 包)。我还将 color-theme 包与午夜主题一起使用。
【问题讨论】:
我不知道答案,只是为了澄清一下:文档字符串和三重引号字符串是不同的东西(尽管三引号通常用于文档字符串)。紧跟在def
或class
行之后的字符串是文档字符串。三引号可让您轻松地将字符串分散到多行。
很高兴知道这一点。我是 Python 新手,因此认为三引号字符串是隐含的文档字符串。那么,问题似乎在于 Emacs 无法区分您描述的文档字符串和 Python 文件中的任何其他三引号字符串。
另见***.com/questions/27317396/…
【参考方案1】:
有趣。我打算说,由于 emacs 语法表的工作方式,emacs 认为 """
和 '''
代表一个空字符串,后面跟着一个新字符串的开头。
您可以通过将以下代码粘贴到 python 缓冲区中来轻松地在您的 emacs 副本中验证这一点:
class MrsRobinson(object):
'''
What's that you say?
'''
pass
在 emacs 23.1.1 [update: 显然是在 stackoveflow 上!] 这完全破坏了文件其余部分的语法突出显示。
我总是专门使用"""
来避免文档字符串中的撇号问题,所以直到这一刻我才注意到,在 emacs 23.2.1 中,这个问题终于得到了解决……
(是的,python.el 中有一个名为 python-quote-syntax
的新函数)
所以:在您的 emacs 版本中,这是不可能的,因为未正确解析字符串。如果您升级到最新的 emacs,您也许可以通过修改 python.el 中的该函数以区别对待它们来实现它。
【讨论】:
我将您的小示例复制到 Emacs 中,它实际上可以正常工作。也就是说,整个文档字符串被突出显示为字符串,而“pass”被正确突出显示为关键字。不过,我不知道是否有办法让 Emacs 区分文档字符串和代码中出现的任何其他三引号(''' 或 """)字符串。我想一定有某种方法可以给 Emacs 一些正则表达式,告诉它文档字符串是什么样的,你知道这是怎么做到的吗? 哦,我可能在较旧的 emacs 上运行“其他”python 模式。无论如何,您仍然必须修改相同的功能。它对 all python 字符串进行语法高亮。您只需要确定字符串(不管它使用多少引号)是否立即出现在文件、类或函数的顶部(忽略 cmets 和空格)。也许您可以修改词法分析器以在遇到class
或 def
时设置一个标志,在遇到 :
时设置另一个标志,在遇到除注释之外的任何内容时都取消设置,如果两者都是设置,它击中的是一个字符串。
我查看了 python.el 文件,这确实是我需要更改的地方来做我想做的事。目前这肯定在我头上,但我必须在某个时候玩弄。感谢您让我更接近于弄清楚这一点。【参考方案2】:
我能够做到这一点:
通过M-x customize-face
输入:font-lock-doc-face
。
它们都是相同颜色的原因是因为font-lock-doc-face
继承自font-lock-string-face
:
我将font-lock-string-face
更新为font-lock-comment-face
(因为我更喜欢我的文档字符串与我的 cmets 具有相同的颜色)。您可以执行相同操作,也可以选择“显示所有属性”来选择您自己的
【讨论】:
以上是关于如何更改 Python 文档字符串的 Emacs 字体?的主要内容,如果未能解决你的问题,请参考以下文章