vs代码片段:如何连续两次使用变量转换

vs code snippet: how to use variable transforms twice in a row

请参阅以下代码段:

    "srcPath":{
    "prefix": "getSrcPath",
    "body": [
        "$TM_FILEPATH",
        "${1:${TM_FILEPATH/(.*)src.(.*)//i}}",
        "${TM_FILEPATH/[\\]/./g}"
    ]
},

第 1-3 行的输出是:

D:\root\src\view\test.lua
view\test.lua
D:.root.src.view.test.lua

如何获得像 'view/test.lua' 这样的输出?

使用扩展名 File Templates,您可以插入包含一个变量和多个 find-replace 操作的“片段”。

使用键绑定:

  {
    "key": "ctrl+alt+f",  // or any other combo
    "command": "templates.pasteTemplate",
    "args": {
      "text": [
        "${relativeFile#find=.*?src/(.*)#replace=#find=[\\/]#flags=g#replace=.#}"
      ]
    }
  }

目前只能通过键绑定或通过 multi command(或类似方式)实现。将添加一个问题以使其也可以通过前缀实现。

还缺少一些标准变量。

试试这个片段:

"srcPath":{
  "prefix": "getSrcPath",
  "body": [
      "$TM_FILEPATH",
      "${TM_FILEPATH/.*src.|(\\)/${1:+/}/g}",
      "${TM_FILEPATH/[\\]/\//g}"
  ]
}

.*src.|(\\) 将匹配包括 ...src\ 路径信息在内的所有内容。我们没有将它保存在捕获组中,因为我们没有在转换的替换部分中使用它。

(\\) 匹配路径其余部分中的任何 \ - 需要 g 标志来获取它们。

替换:${1:+/} 这意味着如果 .*src.|(\\) 中有捕获组 1,则将其替换为 /。请注意,我们不匹配 src\ 之后的其余路径,只匹配可能跟随它的 \。因此,不匹配其他路径部分只会让它们保留在结果中。


你在这一项上很接近:

"${TM_FILEPATH/[\\]/\//g}" 只需将任何 \\ 替换为 \/