我正在尝试创建一个片段,让我为 python 文档字符串生成一个很好的模式,例如这个:
####################################################################################################
# ************************************************************************************************ #
# * 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 ,但我不知道该怎么做。