在使用 VSCode 作为 C++ 开发工具的时候,编写头文件的时候会有大量的冗余代码,使用 Code Snippets 中的 transform 可以大幅提高该过程的效率,于是这里总结一些 VSCode 中一些开发常用的 Code Snippets 常用的笔记
动态变量 Dynamic Variables
使用动态变量可
"File Header": {
"prefix": "hdr",
"body": [
"/**",
" * @file ${1:${TM_FILENAME}}",
" * @author ${2:YourName}",
" * @date $CURRENT_YEAR-$CURRENT_MONTH-$CURRENT_DATE",
" * @brief $0",
" */"
],
"description": "Insert file header"
}
Transform
根据文件名生成默认的 Header 模板
"Godot Cpp Header": {
"scope": "cpp",
"prefix": "gdcpp header",
"body": [
"#ifndef ${TM_FILENAME_BASE/(.*)/${1:/upcase}/}_H",
"#define ${TM_FILENAME_BASE/(.*)/${1:/upcase}/}_H",
"",
"#include \"scene/main/node.h\"",
"",
"class ${TM_FILENAME_BASE/(^|_)([a-z])/${2:/upcase}/g} : public Node {",
" GDCLASS(${TM_FILENAME_BASE/(^|_)([a-z])/${2:/upcase}/g}, Node);",
"public:",
" ${TM_FILENAME_BASE/(^|_)([a-z])/${2:/upcase}/g}();",
" ~${TM_FILENAME_BASE/(^|_)([a-z])/${2:/upcase}/g}();",
"$0",
"};",
"#endif // ${TM_FILENAME_BASE/(.*)/${1:/upcase}/}_H"
],
"description": "根据文件名生成 Godot Class 默认的 Header 模板"
},
解析
${TM_FILENAME_BASE/(^|_)([a-z])/${2:/upcase}/g}
(^|_):匹配行首或下划线(但不用于替换)
([a-z]):捕获紧跟在行首或下划线后的小写字母(这是我们想要大写的部分)
|\\.*:或者匹配从第一个 . 开始到结尾的所有内容(如 .h),目的是忽略扩展名
替换部分:
${2:/upcase}
只保留第 2 个捕获组(即字母),并用 /upcase 将其转为大写
未匹配的部分(如下划线、扩展名)被丢弃
TS 中生成 PascalCase 类名
"Class from filename": {
"prefix": "cls",
"body": [
"class ${TM_FILENAME/(.*)\\..+/${1:/capitalize}/} {",
"\tconstructor() {",
"\t\t$0",
"\t}",
"}"
]
}
TS 中快速添加 try-catch 包裹代码
"Wrap in try-catch": {
"prefix": "try",
"body": [
"try {",
"\t$TM_SELECTED_TEXT",
"} catch (${1:err}) {",
"\tconsole.error($1);",
"\t$0",
"}"
]
}
选中代码 → 输入 try → 自动包裹。
自动生成 Code Snippets
在插件中搜索 Snippet Generator,并安装 wenfangdu.snippet-generator 该插件
Snippets 文件同步
个人片段
- 在 VSCode 中登录个人微软账号,Ctrl+Shift+P 输入
Settings Sync: Configure并勾选 snippets 选择 - 立即同步:Ctrl+Shift+P 输入
Settings Sync: Sync Now
项目片段
在 .vscode/ 下创建 snippets/ 目录,该项目中的代码片段利于团队共享