在使用 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/ 目录,该项目中的代码片段利于团队共享
参考
- https://code.visualstudio.com/docs/editing/userdefinedsnippets#_transform-examples
