首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >基于第一个tabstop的Ultisnips动态tabstop生成

基于第一个tabstop的Ultisnips动态tabstop生成
EN

Stack Overflow用户
提问于 2020-07-24 06:49:18
回答 1查看 95关注 0票数 2

我想要一个能够处理以下情况的Ultisnips代码片段:

代码语言:javascript
复制
const [value1, value2, value3, ...valueN] = await Promise.all([
  promise1,
  promise2,
  promise3,
  ...,
  promiseN,
]);

根据我在第一个方括号中键入的内容,我希望为Promise.all块中的每一行生成相同数量的新制表位。

目前我有一种方法,它几乎是有效的:

代码语言:javascript
复制
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要求我跳一次比我想要的多一次。例如,如果我有:

代码语言:javascript
复制
const [foo, bar, baz|] = await Promise.all([
  val1,
  val2,
  val3,
]);

跳到下一个tabstop,我得到:

代码语言:javascript
复制
const [foo, bar, baz|] = await Promise.all([
 |val1,
  val2,
  val3,
]);

然后:

代码语言:javascript
复制
const [foo, bar, baz|] = await Promise.all([
  val1,
 |val2,
  val3,
]);

然后:

代码语言:javascript
复制
const [foo, bar, baz|] = await Promise.all([
  val1,
  val2,
  |val3,
]);

在这一点上,如果我跳到下一个tabstop,我希望到达代码片段的末尾,然而,发生的情况是:

代码语言:javascript
复制
const [foo, bar, baz|] = await Promise.all([
  val1,
  val2,
  val3,|
]);

这在某种程度上是有意义的,因为这是$0的原始位置。

有没有其他方法可以达到我想要的效果?

EN

回答 1

Stack Overflow用户

发布于 2021-01-26 18:07:54

我试图回答这个问题,因为我参与Ultisnips已经有一段时间了,我没有足够的名气来发表评论。

为什么不尝试将$0放在like ]);$0(您发布的代码的最后一行)?

我想它应该能解决这个问题。让我知道。

编辑:使用专门针对vim和vi相关问题的堆栈。您可以找到站点here

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63064218

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档