variables - 减少 VScode 片段中的重复(保存复杂的转换以供以后使用)
问题描述
有没有办法在 VScode 片段中创建自定义变量?我有这些片段,我根据文件和文件夹的名称创建一个单例。
这是片段:
"Service": {
"prefix": "singletonByPath",
"body": [
"class ${TM_DIRECTORY/.*[^\\w]([a-z])(\\w+)$/${1:/upcase}$2/g}${TM_FILENAME_BASE/([a-z])(\\w+)/${1:/upcase}$2/g} {",
" $0",
"}",
"",
"export const ${TM_DIRECTORY/.*[^\\w]([a-z])(\\w+)$/${1:/downcase}$2/g}${TM_FILENAME_BASE/([a-z])(\\w+)/${1:/upcase}$2/g} = new ${TM_DIRECTORY/.*[^\\w]([a-z])(\\w+)$/${1:/upcase}$2/g}${TM_FILENAME_BASE/([a-z])(\\w+)/${1:/upcase}$2/g}();",
""
],
"description": "Create an exported singleton instance and a class based on the filename and path"
},
因此,当在如下路径中触发片段时:'..../customers/service.ts' 您将得到以下结果:
class CustomersService {
}
export const customersService = new CustomersService();
问题是我有重复的长而难以阅读的正则表达式,我想将它们提取到变量(或没有制表位的镜像)。
我什至更喜欢将这些变量放在“片段全局位置”中,以便我可以在多个片段中使用它们。
是否有可能以某种方式减少这些重复?
解决方案
您可以做几件事来简化您的代码段。没有内置方法可以保存预定义片段部分的“变量”。
这是您的代码的简化:
"Service": {
"prefix": "singletonByPath",
"body": [
// "class ${TM_DIRECTORY/.*[^\\w]([a-z])(\\w+)$/${1:/upcase}$2/g}${TM_FILENAME_BASE/([a-z])(\\w+)/${1:/upcase}$2/g} {",
"class ${1:${TM_DIRECTORY/.*[^\\w]([a-z])(\\w+)$/${1:/upcase}$2/g}}${2:${TM_FILENAME_BASE/([a-z])(\\w+)/${1:/upcase}$2/g}} {",
-- --
" $0",
"}",
"",
// "export const ${TM_DIRECTORY/.*[^\\w]([a-z])(\\w+)$/${1:/downcase}$2/g}${TM_FILENAME_BASE/([a-z])(\\w+)/${1:/upcase}$2/g} = new ${TM_DIRECTORY/.*[^\\w]([a-z])(\\w+)$/${1:/upcase}$2/g}${TM_FILENAME_BASE/([a-z])(\\w+)/${1:/upcase}$2/g}();",
"export const ${1/(\\w+)/${1:/downcase}/}$2 = new $1$2();",
""
],
"description": "Create an exported singleton instance and a class based on the filename and path"
}
注意使用$1:${TM_DIRECTORY...}
和 同样${2:${TM_FILENAME_BASE...}
这有效地设置了转换的结果和转换$1
的结果,并且这些“变量”可以通过引用和在片段的其他地方使用。TM_DIRECTORY
$2
TM_FILENAME_BASE
$1
$2
这些“变量”甚至可以像${1/(\\w+)/${1:/downcase}/}
最后一行中的变换一样进行变换。
您的代码段的最后一行就变成了简单的:
"export const ${1/(\\w+)/${1:/downcase}/}$2 = new $1$2();",
您将不得不按几次制表符,因为这些“变量”现在是制表符,并且在您通过制表符执行最后一次转换之前不会完成最后一次转换,但对于这种简化来说,这是一个很小的代价。
您的代码段还有其他与“变量无关”的简化:
"body": [
"class ${1:${TM_DIRECTORY/.*[\\/\\\\](.*)/${1:/capitalize}/}}${2:${TM_FILENAME_BASE/(.*)/${1:/capitalize}/}} {",
" $0",
"}",
"",
"export const ${1/(\\w+)/${1:/downcase}/g}$2 = new $1$2();",
""
],
您可以使用capitalize
转换。另请注意,这最后body
适用于 Windows 和 linux 路径分隔符。
推荐阅读
- java - 将 Firebase 数据库编号从升序到降序排序
- scala - 当两级选项嵌入类时,Scala Quill 解析不正确
- nsis - 使用NSIS创建安装程序时,如何为exe文件指定与标题栏图标不同的图标?
- javascript - 稍后在 Promise 上添加子句
- node.js - 从 AWS SQS 队列中缓慢删除消息
- cluster-computing - MQ 集群的发送方通道进入重试状态和运行状态,反之亦然
- r - 创建oauth令牌googleAnalyticsR期间的帐户身份验证虚假访问请求
- vb.net - 兑换:创建第一个 Redemption.SafeMailItem 时出错 - 缺少 OutlookServicing.dll
- r - spatstat 中的虚拟点数
- c# - Python len(file.read()) != C# System.IO.File.ReadAllText(path).Length