自动重新格式化文档字符串以尊重右边距

时间:2017-09-20 00:32:06

标签: pycharm editor sublimetext3 docstring

我经常编辑文档字符串并找到我的编辑推动行的宽度超过所需的右边距。因此,在我的docstring再次被接受之前,可能需要重新格式化此编辑下面的许多行文本 什么是自动解决此问题的简单而安全的方法?

例如:

class WellDocumentedClass:
    """The first line of this is <72 characters wide. And is above lots|
    more text. Lorem ipsum dolor sit amet, consectetur adipiscing elit.|
    et mauris ac eros placerat auctor. Mauris mollis est scelerisse    |
    accumsan dapibus. Ut imperdiet suscipit lacinia. Maecenas volutpat |
    iaculis malesuada. Sed venenatis ipsum gravida molestolaoreet. Fuse|
    facilisis neque nec mauris maximus rutrum. Suspendisse at vestibulo|
    orci, ut feugiat odio. Aliquam erat volutpat. Nulla accumsan justo |
    ligula, at imperdiet quam ultrices non. Cras vitae vehicula ligula.|
    Quisque quam massa, dignissim in volutpat in, mattis eu urna.      |
    """
    pass

哦不!我不小心省略了&#34; docstring&#34;从第一行开始。它的格式非常完美!

class WellDocumentedClass:
    """The first line of this docstring is <72 characters wide. And is |above lots
    more text. Lorem ipsum dolor sit amet, consectetur adipiscing elit.|
    et mauris ac eros placerat auctor. Mauris mollis est scelerisse    |
    accumsan dapibus. Ut imperdiet suscipit lacinia. Maecenas volutpat |
    iaculis malesuada. Sed venenatis ipsum gravida molestolaoreet. Fuse|
    facilisis neque nec mauris maximus rutrum. Suspendisse at vestibulo|
    orci, ut feugiat odio. Aliquam erat volutpat. Nulla accumsan justo |
    ligula, at imperdiet quam ultrices non. Cras vitae vehicula ligula.|
    Quisque quam massa, dignissim in volutpat in, mattis eu urna.      |
    """
    pass

哎呀。是时候使用我的鼠标并按下输入...除非......你在这样的时刻做什么?

2 个答案:

答案 0 :(得分:2)

你可以通过创建一个(相对)简单的插件来实现Sublime Text 3中的这个:

  • 工具菜单 - &gt;开发者 - &gt;新插件......
  • 选择全部并替换为以下
import sublime
import sublime_plugin
import textwrap


class WrapTextCommand(sublime_plugin.TextCommand):
    def run(self, edit, width=0):
        # use the narrowest ruler from the view if no width specified, or default to 72 if no rulers are enabled
        width = width or next(iter(self.view.settings().get('rulers', [])), 72)
        new_sel = list()
        # loop through the selections in reverse order so that the selection positions don't move when the selected text changes size
        for sel in reversed(self.view.sel()):
            # make sure the leading indentation is selected, for `dedent` to work properly
            sel = sel.cover(self.view.line(sel.begin()))
            # determine how much indentation is at the first selected line
            indentation_amount = self.view.indentation_level(sel.begin()) * self.view.settings().get('tab_size', 4)
            # create a wrapper that will keep that indentation
            wrapper = textwrap.TextWrapper(drop_whitespace=True, width=width, initial_indent=' ' * indentation_amount, subsequent_indent=' ' * indentation_amount)
            # unindent the selected text before then reformatting the text to fill the available (column) space
            text = wrapper.fill(textwrap.dedent(self.view.substr(sel)))
            # replace the selected text with the rewrapped text
            self.view.replace(edit, sel, text)
            # resize the selection to match the new wrapped text size
            new_sel.append(sublime.Region(sel.begin(), sel.begin() + len(text)))
        self.view.sel().clear()
        self.view.sel().add_all(new_sel)
  • 将其保存在ST建议的文件夹(Packages/User/)中,如wraptext.py
  • 创建一个键绑定来调用新的换行功能:
{ "keys": ["alt+."], "command": "wrap_text" },
  • 享受

wrap docstring

答案 1 :(得分:2)

在pycharm中,标记docstring并单击Edit -> Fill Paragraph