使用正则表达式在 Visual Studio 代码中设置片段

Setting up a snippet in Visual Studio Code with regex

{
    "Comment": {
        "prefix": "#",
        "body":  "<!-- ${TM_FILEPATH/([^/]*\/[^/]*)$//} -->"
    }
}

我已经设置了关于代码片段,目的是添加注释,添加文件的基目录和文件名<!-- templates/base.html --> 像这样但丢弃路径的其余部分。我相信这最初是基于 TextMate 片段。

我已经尝试了所有方法,但我无法让它工作,这可能有些愚蠢,但我不明白我做错了什么。

仅使用 TM_FILEPATH
没有正则表达式的结果 <!-- /Users/johndoe/Sites/blog/blog/templates/base.html -->

我用这个 https://code.visualstudio.com/docs/editor/userdefinedsnippets 找到了一个示例来作为我的代码的基础。例子是这个:

${TM_FILENAME/(.*)\..+$//}
  |           |        | |
  |           |        | |-> no options
  |           |        |
  |           |        |-> references the contents of the first
  |           |             capture group
  |           |
  |           |-> regex to capture everything before
  |               the final `.suffix`
  |
  |-> resolves to the filename

感谢 2 位评论者的想法,我终于能够让它发挥作用。

一位评论者让我走上正轨,使用双反斜杠来捕捉 Windows 和 Unix 风格的斜杠。

另一位评论者建议使用方括号。

最终结果:

{
    "Comment": {
        "prefix": "#",
        "body":  "<!-- ${TM_FILEPATH/.*[\/](.*[\/].*)$//} -->",
    }
}

尝试这样的事情:

"Comment": {
    "prefix": "#",
    "body":  [

      "<!-- ${TM_FILEPATH/.*\\(.*\\.*)$$//} -->",

      "<!-- ${TM_DIRECTORY/.*\\(.*)$//}/${TM_FILENAME} -->",
    ]
},

正文中的这两行应该是等价的。这适用于 Windows 目录样式,例如:

 c:\Users\Mark\asdf\experimental\src\js\main.js

因为你的 path.separators 是 / 尝试类似的东西:

"<!-- ${TM_FILEPATH/.*\/(.*\.*)$//} -->", 
"<!-- ${TM_FILEPATH/.*\/(.*\.*)$//} -->",
"<!-- ${TM_FILEPATH/.*\\/(.*\\.*)$//} -->",
"<!-- ${TM_FILEPATH/.*\\/(.*\\.*)$//} -->",

我只是不知道您的 OS.

需要多少个反斜杠(我无法在这里测试)

让我们尝试使用字符 class 来考虑两种路径分隔符类型并帮助我们同时正确转义:

{
    "Comment": {
        "prefix": "#",
        "body":  [  
            "<!-- ${TM_FILEPATH/.*[\/](.*[\/].*)$$//} -->",
        ]
    },
}