VsCode Snippet PlaceHolder 默认值 File_Name_Base + 大写

VsCode Snippet PlaceHolder default value File_Name_Base + uppercase

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

有上下文。我有一个 tmp.hpp 文件,我想在其中包含

#ifndef TMP_HPP_
    #define TMP_HPP

#endif

我的问题是,我希望能够随心所欲地修改 TMP。为此,我希望它成为默认值 最后,如果我决定将 TMP 修改为 WHATEVER,我想强制 WHATEVER 为大写。

更准确地说,我希望我的 </code> 具有默认值:<code>${TM_FILE_BASE} 并且我还希望 </code> and/or 我的 <code>${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"
}

谢谢

您需要使用嵌套变量:

"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"
}

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