我想要一个能够处理以下场景的 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,
]);
跳到下一个制表位,我得到:
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,
]);
此时,如果我跳到下一个制表位,我希望到达片段的末尾,但是,会发生什么:
const [foo, bar, baz|] = await Promise.all([
val1,
val2,
val3,|
]);
这有点道理,因为那是$0
.
还有其他方法可以实现我想要的吗?