我猜核心代码是
snip.rv='\`\`\`mermaid\n graph $1'+out+'\`\`\`'我想在snip.rv中使用tabstop $1,如果可能的话,在var输出中使用。
完整的代码如下所示:
snippet '(?<!\\)([0-9])([0-9])gtb' "graphy" r
$1`!p
x=match.group(1)
y=match.group(2)
row1=""
for i in range(int(x)):
row1+=" -->"
row1+="\n"
out=int(y)*row1
snip.rv='\`\`\`mermaid\n graph $1'+out+'\`\`\`'
`$0
endsnippet发布于 2019-12-29 23:03:21
您在代码片段中使用了Python interpolation (`!p ...`),并且UltiSnips不会在嵌入式Python代码本身中执行任何占位符替换。(由于许多与转义Python术语和字符串相关的原因,这样做会有问题。)
相反,UltiSnips将在t变量中导出占位符,您可以在Python代码中访问该变量。
有关Python插值块中的可用变量,请参阅the docs,其中包括:
t - The values of the placeholders, t[1] is the text of ${1}, etc.因此,您实际上可以在代码行中使用t[1]作为Python变量,如下所示:
snip.rv='\`\`\`mermaid\n graph '+t[1]+out+'\`\`\`'发布于 2019-12-30 16:29:37
谢谢你的帮助,我终于知道我可以
snip.expand_anon(anon_snippet_table)得到我想要的方法
def create_gtable(snip):
# retrieving single line from current string and treat it like tabstops count
placeholders_string = snip.buffer[snip.line].strip()
rows_amount = int(placeholders_string[0])
columns_amount = int(placeholders_string[1])
# erase current line
snip.buffer[snip.line] = ''
# create anonymous snippet with expected content and number of tabstops
anon_snippet_title = "\`\`\`mermaid\n graph "+'$1' + "\n"
anon_snippet_end="\`\`\`"
anon_snippet_body = ""
for row in range(1,rows_amount+1):
anon_snippet_body += ' -> '.join(['$' + str(row*columns_amount+col+1) for col in range(1,columns_amount+1)]) + "\n"
anon_snippet_table = anon_snippet_title+ anon_snippet_body+anon_snippet_end
# expand anonymous snippet
snip.expand_anon(anon_snippet_table)https://stackoverflow.com/questions/59517785
复制相似问题