VsCode Snippet PlaceHolder 默认值 File_Name_Base + 大写

Dzi*_*ous 1 regex code-snippets visual-studio-code vscode-snippets

为了在未来赢得一些时间,我正在尝试为 VsCode 创建一些片段。

有上下文。我有一个tmp.hpp我想要的文件

#ifndef TMP_HPP_
    #define TMP_HPP

#endif
Run Code Online (Sandbox Code Playgroud)

我的问题是,我希望能够TMP按我想要的方式进行修改。为此,我希望它成为默认值最后,如果我决定修改TMPWHATEVER我想强制WHATEVER为大写。

更准确地说,我希望 my${1}具有默认值:${TM_FILE_BASE}并且我也希望${1}和/或 my${TM_FILE_BASE}${/upper}

这是我目前得到的:

"Creates a ifndef": {
    "prefix": "ifndef",
    "body": [
      "#ifndef ${${1:TM_FILENAME_BASE/(.*)/${1:/upcase}/}}_HPP_",
      "  #define ${${1:TM_FILENAME_BASE/(.*)/${1:/upcase}/}_HPP_",
      "",
      "#endif"
    ],
    "description": "Creates a basic ifndef"
}
Run Code Online (Sandbox Code Playgroud)

谢谢

Wik*_*żew 5

您需要使用嵌套变量:

"Creates a ifndef": {
    "prefix": "ifndef",
    "body": [
      "#ifndef ${1:${TM_FILENAME_BASE/(.*)/${1:/upcase}/}}_HPP_",
      "  #define ${1:${TM_FILENAME_BASE/(.*)/${1:/upcase}/}}_HPP_",
      "",
      "#endif"
    ],
    "description": "Creates a basic ifndef"
}
Run Code Online (Sandbox Code Playgroud)

注意该${1:${TM_FILENAME_BASE/(.*)/${1:/upcase}/}}部分。这里,${1:...}是占位符的语法,其中的 thr${TM_FILENAME_BASE/(.*)/${1:/upcase}/}指定使用基于正则表达式的替换修改的变量(所有内容都匹配并捕获到组 1 中,并/(.*)/使用大写变体替换${1:/upcase}/}(这里$1是组1 个值占位符))。