我想要一个能够处理以下情况的Ultisnips代码片段:
const [value1, value2, value3, ...valueN] = await Promise.all([
promise1,
promise2,
promise3,
...,
promiseN,
]);根据我在第一个方括号中键入的内容,我希望为Promise.all块中的每一行生成相同数量的新制表位。
目前我有一种方法,它几乎是有效的:
global !p
def insert_lines(txt, start = 2, generate_value = lambda i: f'val{i}'):
count = len(txt.split(','))
lines = ["${" + str(i) + ":" + generate_value(i+1-start) + "}," for i in range(start, count + 2)]
snip.expand_anon("\n".join(lines))
endglobal
post_jump "if snip.tabstop == 0: insert_lines(snip.tabstops[1].current_text, start=2)"
snippet pall "await Promise.all" b
const [${1:...items}] = await Promise.all([
$0
]);
endsnippet我遇到的问题是,$0要求我跳一次比我想要的多一次。例如,如果我有:
const [foo, bar, baz|] = await Promise.all([
val1,
val2,
val3,
]);跳到下一个tabstop,我得到:
const [foo, bar, baz|] = await Promise.all([
|val1,
val2,
val3,
]);然后:
const [foo, bar, baz|] = await Promise.all([
val1,
|val2,
val3,
]);然后:
const [foo, bar, baz|] = await Promise.all([
val1,
val2,
|val3,
]);在这一点上,如果我跳到下一个tabstop,我希望到达代码片段的末尾,然而,发生的情况是:
const [foo, bar, baz|] = await Promise.all([
val1,
val2,
val3,|
]);这在某种程度上是有意义的,因为这是$0的原始位置。
有没有其他方法可以达到我想要的效果?
发布于 2021-01-26 18:07:54
我试图回答这个问题,因为我参与Ultisnips已经有一段时间了,我没有足够的名气来发表评论。
为什么不尝试将$0放在like ]);$0(您发布的代码的最后一行)?
我想它应该能解决这个问题。让我知道。
编辑:使用专门针对vim和vi相关问题的堆栈。您可以找到站点here。
https://stackoverflow.com/questions/63064218
复制相似问题