UltiSnips生成带有固定大小的文本框的Python文档字符串

时间:2018-11-15 10:46:42

标签: python vim code-snippets docstring ultisnips

我正在尝试创建一个片段,以使我为python docstring生成一个不错的模式,例如:

####################################################################################################
# ************************************************************************************************ #
# *                                       HOUSING DATASET                                        * #
# ************************************************************************************************ #
#                                                                                                  #
# This is what content would look like, multiple lines.                                            #
# The features of the 506 samples can be summarized as:                                            #
#                                                                                                  #
####################################################################################################

我希望标题位于模式的中心,空格围绕其扩展到固定大小。对于下面的内容,我希望每行以“#”模式开头,并以相同的模式结尾。同样,我希望内容行的大小固定。我设法从Honza pythonx和他的all.snippets的灵感中提取了摘录的标题部分。

我当前拥有的代码如下(请注意,由于我仍在弄清楚,它可能有点脏):

global!p
def make_title(twidth, bwidth=None):
    b, e = '# *', '* #'
    bwidth_inner = bwidth - 3 - max(len(b), len(b + e)) if bwidth else twidth + 2
    nspaces = (bwidth_inner - twidth) // 2
    mlines = b + ' ' + ' ' * nspaces
    mlinee = ' ' + ' ' * (bwidth_inner - twidth -nspaces) + e
    return mlines, mlinee
endglobal

snippet header 'Module docstring' b
"""
####################################################################################################
# ************************************************************************************************ #
`!p
width = 80
box = make_title(len(t[1], width)
snip.rv = box[0]
`${1:${VISUAL:title}}`!p
snip.rv = box[1]`
# ************************************************************************************************ #

此代码按预期工作,并根据需要生成标题。因此,我尝试将概念扩展到内容部分,并编写了以下内容:

global!p
def make_title(twidth, bwidth=None):
    b, e = '# *', '* #'
    bwidth_inner = bwidth - 3 - max(len(b), len(b + e)) if bwidth else twidth + 2
    nspaces = (bwidth_inner - twidth) // 2
    mlines = b + ' ' + ' ' * nspaces
    mlinee = '  ' + ' ' * (bwidth_inner - twidth - nspaces) + e
    return mlines, mlinee
endglobal
def make_content_line(twidth, bwidth=None):
    b, e = '# ', ' #'
    bwidth_inner = bwidth - 3 - max(len(b), len(b + e)) if bwidth else twidth + 2
    nspaces = (bwidth_inner - twidth) // 2
    mlines = b + ' ' + ' ' * nspaces
    mlinee = '  ' + ' ' * (bwidth_inner - twidth - nspaces) + e
    return mlines, mlinee
endglobal

snippet header 'Module docstring' b
"""
####################################################################################################
# ************************************************************************************************ #
`!p
width = 80
box = make_title(len(t[1], width)
snip.rv = box[0]
`${1:${VISUAL:title}}`!p
snip.rv = box[1]`
# ************************************************************************************************ #
`!p
width = 80
box = make_title(len(t[1], width)
snip.rv = box[0]
`${2:${VISUAL:content}}`!p
snip.rv = box[1]`

现在这几乎可以按照我的要求运行,除了第一个可视部分似乎已链接到第二个可视部分,并且修改标题会更改内容的初始显示方式。编写内容不会改变标题,但我可以自己站起来。

所以我有两个问题:如何断开代码段的这两部分的链接,使它们相互独立,并且在编写内容时如何生成内容行?我猜一种方法是每次用户按下跳转快捷方式时都生成一个新的content_line,但我不知道这样做。

0 个答案:

没有答案