vscode 片段:如何link 片段中的位置到制表位?

vscode snippets: How to link a position in the snippet to a tabstop?

我想创建一个片段来打印变量的值以用于调试目的。这是我想出的:

{
  "Debug": {
    "prefix": ["db"],
    "body": ["console.log(\" :\", )"]
  }
}

当我使用这个片段时,光标在引号之间(| 是光标位置):

console.log("| :",)

在我输入变量名称后,它将名称复制到第二个参数:

console.log("name :", name)

但我不能在字符串中使用自动完成功能。有时变量是一个对象,自动完成帮助我选择对象的特定键。我希望光标停在第二个参数中,以便我可以使用自动完成:

console.log(" :", |)

无论我输入什么,都应该在双引号内复制:

console.log("name :", name)

和前面的例子一样,但是倒退了。

我该怎么做?

更新: 我创建了一个问题:https://github.com/microsoft/vscode/issues/142327

我试过以下版本:

{
  "Debug": {
    "prefix": ["db"],
    "body": ["console.log(\"${2:} :\", );[=10=]"]
  }
}

它从 1 美元开始,但立即也显示 2 美元的文本,使用 TAB 我可以更改双引号之间的文本,但我没有得到 1 美元的 auto-completion。

我认为这应该在 repo 的一个问题中提出。 $2 应该在 TAB 之后复制 $1 的文本,并且 $1 应该像使用

时那样具有 auto-completion
{
  "Debug": {
    "prefix": ["db"],
    "body": ["console.log(\" :\", );[=11=]"]
  }
}

我假设您已 Editor > Suggest: Snippets Prevent Quick Suggestions 禁用并且

"editor.quickSuggestions": {
  "other": true,
  "comments": true,
  "strings": true       // the important one here
},

在我的测试中,即使使用这些设置它仍然不起作用。这看起来确实像一个错误。它甚至在更简单的情况 "\"\" " 上也失败了。因此,尽管有上述设置,但在字符串中的一些东西会阻止智能感知。

但是有一个解决方法

"Debug": {
  "prefix": ["db"],
  "body": [
        // select everything you want to surround with quotes
    "console.log(${2: :}, )"   // you will get intellisense
  ]
}

${2:...} 将 select tabstop 1 + : 的结果,然后您可以点击 " 将 selection 用引号括起来。你只需要再打一个 tab 然后你可能会期待。