【问题标题】:Ultisnips dynamic tabstop generation based on first tabstop基于第一个制表符的 Ultisnips 动态制表符生成
【发布时间】:2021-01-26 18:23:21
【问题描述】:

我想要一个能够处理以下场景的 Ultisnips sn-p:

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,
]);

此时,如果我跳到下一个制表位,我希望到达 sn-p 的末尾,但是,会发生什么:

const [foo, bar, baz|] = await Promise.all([
  val1,
  val2,
  val3,|
]);

这有点道理,因为那是 $0 的原始位置。

还有其他方法可以实现我想要的吗?

【问题讨论】:

    标签: vim ultisnips


    【解决方案1】:

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

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

    我想它应该可以解决问题。告诉我。

    编辑:使用专门为 vim 和 vi 相关问题制作的堆栈来解决此类问题。您可以找到该网站here

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-10-03
      • 1970-01-01
      • 1970-01-01
      • 2015-04-28
      • 1970-01-01
      • 1970-01-01
      • 2013-01-12
      • 2013-01-10
      相关资源
      最近更新 更多