Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/304.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何更改Emacs';Python文档字符串的字体?_Python_Emacs_Docstring_Emacs Faces - Fatal编程技术网

如何更改Emacs';Python文档字符串的字体?

如何更改Emacs';Python文档字符串的字体?,python,emacs,docstring,emacs-faces,Python,Emacs,Docstring,Emacs Faces,我刚刚开始学习Python并使用Emacs作为我的编辑器。目前,Emacs对普通字符串(单引号)和docstring(三引号)使用相同的颜色。我希望docstring是一种不同的颜色,所以我使用“选项->自定义Emacs”菜单选项将“字体锁定doc face”更改为新颜色并保存了更改。但是,Emacs继续保持文档字符串与普通字符串的颜色相同。更改普通字符串的颜色也会将更改应用于docstring Emacs似乎将docstring和普通字符串视为相同的东西。有没有一种方法可以让Emacs正确地查

我刚刚开始学习Python并使用Emacs作为我的编辑器。目前,Emacs对普通字符串(单引号)和docstring(三引号)使用相同的颜色。我希望docstring是一种不同的颜色,所以我使用“选项->自定义Emacs”菜单选项将“字体锁定doc face”更改为新颜色并保存了更改。但是,Emacs继续保持文档字符串与普通字符串的颜色相同。更改普通字符串的颜色也会将更改应用于docstring

Emacs似乎将docstring和普通字符串视为相同的东西。有没有一种方法可以让Emacs正确地查找Python文档字符串并将其与普通字符串分开着色

编辑:我正在使用带有默认Python模式设置的Emacs 23.1.1(Kubuntu 10.10包)。我还将颜色主题包与午夜主题一起使用。

很有趣。我想说的是,由于emacs语法表的工作方式,emacs认为
表示一个空字符串,该字符串由一个新字符串的开头折叠

通过将以下代码粘贴到python缓冲区中,可以在emacs副本中轻松验证这一点:

class MrsRobinson(object):
    '''
    What's that you say?
    '''
    pass
在emacs 23.1.1[更新:和stackoveflow!]中,这完全破坏了文件其余部分的语法高亮显示

我总是特别使用
来避免docstrings中的撇号问题,所以直到现在我才注意到在emacs 23.2.1中,这一问题终于得到了解决

(是的,python.el中有一个名为
python-quote-syntax
的新函数)


因此:在您的emacs版本中,这是不可能的,因为字符串没有正确解析。如果您升级到最新的emacs,您可以通过修改python.el中的函数以区别对待它们来实现这一点。

我能够做到这一点:

通过执行
M-x自定义面
并输入:
font-lock-doc-face

它们颜色相同的原因是
字体锁定文档面
继承自
字体锁定字符串面


我将
font-lock-string-face
更新为
font-lock-comment-face
(因为我希望我的文档字符串与我的注释具有相同的颜色)。你也可以这样做,或者选择“显示所有属性”来选择你自己的属性

我不知道答案,但只是想澄清一下:docstring和三引号字符串是分开的(尽管三引号通常用于docstring)。紧跟在
def
class
行之后的字符串是docstring。三重引号可以让你很容易地将一个字符串分散在几行上。这很好。我是Python新手,所以认为三引号字符串隐式地是docstring。那么,问题似乎在于Emacs无法区分您描述的docstring和Python文件中的任何其他三重引号字符串。也就是说,整个文档字符串突出显示为字符串,“pass”正确突出显示为关键字。不过,我不知道是否有办法让Emacs区分docstring和代码中出现的任何其他三引号(“”)字符串。我想一定有办法向Emacs提供一些正则表达式,告诉它docstring是什么样子的,你知道怎么做吗?哦,我可能正在运行“其他”字符串“旧emacs上的python模式。无论如何,您仍然必须修改相同的函数。它对所有python字符串进行语法高亮显示。您只需要确定字符串(不管它使用了多少引号)是否立即出现在文件、类或函数的顶部(忽略注释和空格)。也许您可以修改lexer,当它点击
定义
时设置一个标志,当它点击
时设置另一个标志:
,当它点击除注释以外的任何内容时取消设置这两个标志,如果两个都设置了,则覆盖面,并且它命中的是一个字符串。我查看了python.el文件,这确实是我需要更改的地方,以实现我想要的。现在我肯定是受不了了,但总有一天我会和他一起玩的。谢谢你让我更接近了解这一点。