如何更改 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 包与午夜主题一起使用。

【问题讨论】:

我不知道答案,只是为了澄清一下:文档字符串和三重引号字符串是不同的东西(尽管三引号通常用于文档字符串)。紧跟在defclass 行之后的字符串是文档字符串。三引号可让您轻松地将字符串分散到多行。 很高兴知道这一点。我是 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 和空格)。也许您可以修改词法分析器以在遇到 classdef 时设置一个标志,在遇到 : 时设置另一个标志,在遇到除注释之外的任何内容时都取消设置,如果两者都是设置,它击中的是一个字符串。 我查看了 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 字体?的主要内容,如果未能解决你的问题,请参考以下文章

如何更改 Emacs 的默认字体大小和字体类型?

如何修复 emacs 24 中的 javascript 模式更改?

如何更改分屏emacs窗口的大小?

Emacs中的Color Python关键字参数

如何更改emacs上的光标颜色

如何使用Emacs更改文件的读/写模式?