vscode snippets C语言头文件宏定义

"head": {
	"prefix": "head",
	"body": [
		"#ifndef ${TM_FILENAME_BASE/([A-Za-z0-9]+)([^A-Za-z0-9]*)/${1:/upcase}${2:+_}/g}_H",
		"#define ${TM_FILENAME_BASE/([A-Za-z0-9]+)([^A-Za-z0-9]*)/${1:/upcase}${2:+_}/g}_H",
		"",
		"$0",
		"",
		"#endif // ${TM_FILENAME_BASE/([A-Za-z0-9]+)([^A-Za-z0-9]*)/${1:/upcase}${2:+_}/g}_H"
	],
	"scope": "cpp"
}

scope指定为c++
xixili-head.h为例

${TM_FILENAME_BASE/([A-Za-z0-9]+)([^A-Za-z0-9]*)/${1:/upcase}${2:+_}/g}_H

其中TM_FILENAME_BASE表示当前文件的文件名(不包含后缀名),例子为xixili-head
该表达式使用官网文档中的format语法,大致可以理解为

${源字符串/正则处理/替换规则/模式}
源字符串 TM_FILENAME_BASE即xixili-head
正则处理 ([A-Za-z0-9]+)([^A-Za-z0-9]*)
替换规则 ${1:/upcase}${2:+_}
模式 g

([A-Za-z0-9]+)([^A-Za-z0-9]*)
表示选取字母段然后选取之后的非字母段(非字母段可以没有),对于xixili-head则匹配到两次,第一次xixil- 和第二次head

${1:/upcase}${2:+_}
第一次xixili-([A-Za-z0-9]+) 段匹配到 xixili([^A-Za-z0-9]*) 段匹配到-,根据替换规则xixili将被转为XIXILI- 将转为 _

第二次的head([A-Za-z0-9]+) 段匹配到 head([^A-Za-z0-9]*) 段匹配为空,根据替换规则head将被转为HEAD

${1} 表示匹配的第一个group,加上 :/upcase 则将这个group转为大写,${2} 表示匹配的第二个group,:+ 则表示若存在(个人理解) 匹配则将group变为 _

g

表示全局匹配,即多次匹配,不会因为匹配到了 xixili- 就不再匹配了

最终结果

  • xixili-head.h -> XIXILI_HEAD_H
  • xixili.head.h -> XIXILI_HEAD_H
  • a-b-c-d-e.h -> A_B_C_D_E_H
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值