如何从 vscode 片段中的 TM_FILEPATH 获取模块 ID?
How to get the module id from TM_FILEPATH in a vscode snippet?
有没有办法将 TM_FILEPATH
变量的值转换为模块 ID?
我想创建一个解析模块 ID 的片段:
d:\myrepo\client\store\calc.ts => <amd-module name="store/calc" />
{
"prefix": "amd-module-name",
"body": [
"/// <amd-module name=\"${TM_FILEPATH/.*client\\(.*)\..*$//}\" />\n"
]
}
上面的片段给了我 <amd-module name="store\calc" />
但我如何去掉反斜杠?
试试这个:
"someName" : {
"prefix": "amd-module-name",
"body": [
"/// <amd-module name=\"${TM_DIRECTORY/(.*client[\\\/])?([^\/\\]*)([\/\\])?/${3:+\/}/g}\/$TM_FILENAME_BASE\" />\n",
]
},
它很长但相当强大(以及所有那些必要的双重转义!)。
这将处理带有 \ 或 / 路径分隔符的目录。
[\\\/]
表示 \ 或 /(您只需要在 vscode 片段中的 \ 之前使用 3 个转义反斜杠,在 / 之前使用两个转义反斜杠)!!
所以 [^\/\\]*
表示获取字符,直到你击中斜杠。
此正则表达式适用于“client
”下的任意数量的目录。部分感谢 global regex modifier g
.
d:\myrepo\client\store\subStore\calc.ts => <amd-module name="store/subStore/calc" />
这部分很好:${3:+\/}
这意味着插入匹配组 2,并且仅当有匹配组 3 时才添加反斜杠 /。这会考虑其中包含文件的最后一个目录,并根据需要将捕获的组 3 \ 更改为 /。
有没有办法将 TM_FILEPATH
变量的值转换为模块 ID?
我想创建一个解析模块 ID 的片段:
d:\myrepo\client\store\calc.ts => <amd-module name="store/calc" />
{
"prefix": "amd-module-name",
"body": [
"/// <amd-module name=\"${TM_FILEPATH/.*client\\(.*)\..*$//}\" />\n"
]
}
上面的片段给了我 <amd-module name="store\calc" />
但我如何去掉反斜杠?
试试这个:
"someName" : {
"prefix": "amd-module-name",
"body": [
"/// <amd-module name=\"${TM_DIRECTORY/(.*client[\\\/])?([^\/\\]*)([\/\\])?/${3:+\/}/g}\/$TM_FILENAME_BASE\" />\n",
]
},
它很长但相当强大(以及所有那些必要的双重转义!)。
这将处理带有 \ 或 / 路径分隔符的目录。
[\\\/]
表示 \ 或 /(您只需要在 vscode 片段中的 \ 之前使用 3 个转义反斜杠,在 / 之前使用两个转义反斜杠)!!
所以 [^\/\\]*
表示获取字符,直到你击中斜杠。
此正则表达式适用于“client
”下的任意数量的目录。部分感谢 global regex modifier g
.
d:\myrepo\client\store\subStore\calc.ts => <amd-module name="store/subStore/calc" />
这部分很好:${3:+\/}
这意味着插入匹配组 2,并且仅当有匹配组 3 时才添加反斜杠 /。这会考虑其中包含文件的最后一个目录,并根据需要将捕获的组 3 \ 更改为 /。