使用正则表达式在 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/.*[\/](.*[\/].*)$$//} -->",
]
},
}
{
"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/.*[\/](.*[\/].*)$$//} -->",
]
},
}