在python docstring中使fill-paragraph保留在单独行的三引号


16

我像这样在一行上全部输入python docstring:

"""
This is a long docstring. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec a diam lectus. Sed sit amet ipsum mauris. Maecenas congue ligula ac quam viverra nec consectetur ante hendrerit. Donec et mollis dolor. Praesent et diam eget libero egestas mattis sit amet vitae augue. Nam tincidunt congue enim, ut porta lorem lacinia consectetur. Donec ut libero sed arcu vehicula ultricies a non tortor. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean ut gravida lorem. Ut turpis felis, pulvinar a semper sed, adipiscing id dolor. Pellentesque auctor nisi id magna consequat sagittis.
"""

然后点击Mq(fill-paragraph),得到以下信息:

"""This is a long docstring. Lorem ipsum dolor sit amet, consectetur
adipiscing elit. Donec a diam lectus. Sed sit amet ipsum
mauris. Maecenas congue ligula ac quam viverra nec consectetur ante
hendrerit. Donec et mollis dolor. Praesent et diam eget libero egestas
mattis sit amet vitae augue. Nam tincidunt congue enim, ut porta lorem
lacinia consectetur. Donec ut libero sed arcu vehicula ultricies a non
tortor. Lorem ipsum dolor sit amet, consectetur adipiscing
elit. Aenean ut gravida lorem. Ut turpis felis, pulvinar a semper sed,
adipiscing id dolor. Pellentesque auctor nisi id magna consequat
sagittis.

"""

我对此有两个问题:

  1. 该文档字符串与"""- 在同一行开始-我更希望三引号保持在自己的行上。
  2. (优先级低得多。)文档字符串以空行结尾。

上面的示例是人为设计的,但是我经常遇到这种情况,尤其是在编辑现有文档字符串时,我想简单地M-q将整个参数重排。

Answers:


15

进行相应的自定义python-fill-docstring-style,假设您正在使用Emacs 24.4中的内置Python模式。默认值为pep-257,这会导致您观察到的样式,即在文档字符串的开头没有换行,在文档字符串的结尾前没有换行。

将此变量更改为symmetricdjango以使Python模式遵循您的首选样式,即在文档字符串开头的换行符和结尾的换行符:

(setq python-fill-docstring-style 'django)

或者,通过Directory Variables进行设置,以针对每个项目分别配置文档字符串样式。

symmetric并且django是不同的wrt单行文档字符串。如果文档字符串适合一行,则前者将三引号放在同一行上,而在这种情况下,后者将三引号放在单独的行上。

查看的文档字符串python-fill-docstring-style以查看所有可用选项。


-1

空行结尾处,它看起来像是一个普通的错误,请使用进行报告M-x report-emacs-bug。但是对于第一个元素,我不确定是错误还是功能,因此您可能要在错误报告中提及它,但是答案可能是它只是遵循“ PEP-NNN”约定。

也就是说,您可以通过以下方法解决第一个问题:

(add-hook 'python-mode-hook
          (lambda ()
            (set (make-local-variable 'paragraph-separate)
                 (concat paragraph-separate "\\|^[ \t]*\"\"\"[ \t]*$"))))

1
它既不是错误,也不需要更改paragraph-separate。的文档字符串样式python.el是可自定义的。
lunaryorn 2014年

哇,我从没想过文档字符串末尾的多余空行可能是由标准强制执行的。
Stefan 2014年

1
该标准(PEP 257)实际上并没有强制执行,只是对其的(常见)解释。Emacs也支持该变体而没有尾随换行符,如pep-257-nn中所示python-fill-docstring-style
lunaryorn 2014年

1
具有讽刺意味的是,空白链接的原因是:除非整个文档字符串都适合一行,否则请自行将右引号放在一行上。这样,可以在其上使用Emacs的fill-paragraph命令。
Felipe
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.