Visual Studio 代码片段选择和变量

alw*_*arn 3 code-snippets visual-studio-code vscode-snippets

我正在将自己的代码段写入 console.log

{  
  "Print to console": {
    "scope": "javascript,typescript",
    "prefix": "debug",
    "body": [
      "console.log('${1|[Debug],[Server],[$TM_FILENAME]|}','${2:~Line: $TM_LINE_NUMBER ~ File:$TM_FILENAME}',${3:$TM_SELECTED_TEXT}); //debug",
      "$4"
    ],
    "description": "Log output to console"
  }
}
Run Code Online (Sandbox Code Playgroud)

一切正常,除了文件名静态文本 TM_FILENAME 显示在占位符 '$1' 的选择中 ${1|[Debug],[Server],[$TM_FILENAME]|}。如何使文件名显示在此处?谢谢你的建议

Mar*_*ark 5

虽然您不能直接在片段选择中使用变量,但您可以像这样解决它:

  "Print to console": {
    "scope": "javascript,typescript",
    "prefix": "debug",
    "body": [

      // moved brackets in the choice
      "console.log('[${1|Debug,Server],fileName|}]','${2:~Line: $TM_LINE_NUMBER ~ File:$TM_FILENAME}',${3:$TM_SELECTED_TEXT}); //debug",
      "$4"
    ],
    "description": "Log output to console"
  },

  "getfileName": {
    "scope": "javascript,typescript",
    "prefix": "fileName",   // <= same exact prefix as appears in the choice above
    "body": [
      "$TM_FILENAME"
    ],
    "description": "get the file name"
  }
Run Code Online (Sandbox Code Playgroud)

这个想法是fileName选择实际上是您可以在做出选择后触发的另一个片段。选择后,fileName您将不得不Ctrl+ 调Space出第二个片段。这需要更多的工作,但它确实允许您在片段选择中获得“类似变量”的行为。在第二个片段中,您可以随意添加或修改文件名。

此外,有时您必须稍微修改选择。我修改了你的,但输出是一样的。否则将[fileName]被打印并且不会被视为与其他fileName前缀的匹配。尽管在您的情况下,您可以将其保留为:

"console.log('${1|[Debug],[Server],[fileName]|}','${2:~Line: $TM_LINE_NUMBER ~ File:$TM_FILENAME}',${3:$TM_SELECTED_TEXT}); //debug",
Run Code Online (Sandbox Code Playgroud)

在第一个片段中,然后像这样制作第二个前缀:

"prefix": "fileName]",  // note the trailing bracket
Run Code Online (Sandbox Code Playgroud)

相同的结果,只需注意调整第二个前缀以匹配选择选项实际打印的内容,否则将不起作用。

片段选择变量