vs code支持用户自定义代码片段,用起来很方便,下面来介绍一下如何使用用户代码片段
1.用户代码片段简单介绍
1.1 点击左下角设置
1.2 在cpp.json中设置要定义的代码片段
"Print to console": {
"prefix": "log",
"body": [
"console.log('$1');",
"$2"
],
"description": "Log output to console"
}`
第一行字符串:代码片段名称
prefix:快捷代码的前缀
body:要生成的代码
description:代码片段描述
制表位
使用制表符,可以使编辑器光标在摘要内移动。使用$1,$2指定游标的位置,该数字是将按Tab键访问的顺序,而$0表示最终光标的位置。多次出现相同的制表位被链接并同步更新。
占位符
占位符是带有值的制表符例如 ${1:foo}。占位符文本将被插入和选择,以便可以轻松更改。占位符可以嵌套,例如 ${1:another
${2:placeholder}}
选择号
占位符可以选择作为值。语法是用逗号分隔的值枚举,例如用竖线字符括起来${1|one,two,three|}。插入代码段并选择占位符后,选项将提示用户选择其中一个值。
如下是我自己定义的几个代码片段
"int main(int argc, char *argv[])" :{
"prefix": "im",
"body": [
"int main(int argc, char *argv[])",
"{",
"\t$1",
"\treturn 0;",
"}"
],
"description": "main函数"
},
"头文件防止重复包含": {
"prefix": "#inf",
"body": [
"#ifndef _${TM_FILENAME_BASE/(.*)/${1:/upcase}/}_H_",
"#define _${TM_FILENAME_BASE/(.*)/${1:/upcase}/}_H_",
"", "$1", "", "", "", "", "", "", "", "",
"#endif"
],
"description": "头文件防止重复包含"
},
"Author info" : {
"prefix": "#author",
"body": [
"/*",
" * @Author: Author",
" * @Date: $CURRENT_YEAR-$CURRENT_MONTH-$CURRENT_DATE $CURRENT_HOUR:$CURRENT_MINUTE:$CURRENT_SECOND",
" * @Last Modified by: Author",
" * @Last Modified time: $CURRENT_YEAR-$CURRENT_MONTH-$CURRENT_DATE $CURRENT_HOUR:$CURRENT_MINUTE:$CURRENT_SECOND",
" * @Description: $1",
"*/",
],
"description": "作者信息"
},
"for(auto &value : continer)" :{
"prefix": "forr",
"body": [
"for(auto &${1:value} : ${2:continer})",
"{",
"\t$0",
"}"
],
"description": "for(auto &value : continer)"
},
"返回值判断if" : {
"prefix": "ie", //if error
"body": [
"if(${1:ret} ${2|< 0,> 0,== 0,== nullptr, != nullptr|})",
"{",
"\t${3|printf,fprintf|}(\"$4\");$0",
"}"
],
"description": "返回值判断"
},
第一个代码片段生成main函数
生成的代码片段
第二个代码片段在.h文件中可以快速添加防止头文件重复包含的预处理
生成的代码片段
第三个代码片段是快捷生成作者信息的
生成的片段:
第四个代码片段生成forrange循环
生成的代码片段
此时光标停留在value上可以直接修改value的值,然后按Tab键光标将停留在continer上,可以修改该值,最后按Tap光标将会跳到$0处
第五个代码片段生成判断返回值的代码
生成的代码
按下Tab后
2 用户代码片段中的内置变量
使用$name,您可以插入变量的值。
TM_SELECTED_TEXT 当前选定的文本或空字符串
TM_CURRENT_LINE 当前行的内容
TM_CURRENT_WORD 光标下的内容或空字符串
TM_LINE_INDEX 从零开始的当前行号
TM_LINE_NUMBER 从一开始的当前行号
TM_FILENAME 当前文档的文件名
TM_FILENAME_BASE 基当前文档的文件名,不带扩展名
TM_DIRECTORY 当前文档的目录
TM_FILEPATH 当前文档的完整文件路径
CLIPBOARD 剪贴板的内容
WORKSPACE_NAME 打开的工作区或文件夹的名称
日期:
CURRENT_YEAR 当前年份
CURRENT_YEAR_SHORT 当前年份的最后两位数字
CURRENT_MONTH 两位数的当前月份(例如“02”)
CURRENT_MONTH_NAME 当前月份的英文全名(例如’July’)
CURRENT_MONTH_NAME_SHORT 当前月份的英文短名称(例如’Jul’)
CURRENT_DATE 今天几号
CURRENT_DAY_NAME 英文的星期几(例如’Monday’)
CURRENT_DAY_NAME_SHORT 英文星期几的短名称(例如’Mon’)
CURRENT_HOUR 24小时制的当前小时
CURRENT_MINUTE 当前分钟
CURRENT_SECOND 当前秒
CURRENT_SECONDS_UNIX 自格林威治时间以来的秒数(1970年1月1日)
注释:
BLOCK_COMMENT_START 区块注释开始 <!--
BLOCK_COMMENT_END 区块注释结束 -->
在php中会变成/*和*/
LINE_COMMENT 单行注释: PHP中: //
文字转换(正则)
${TM_FILENAME/[\\.]/_/} 将文件名中的.换成_
${TM_FILENAME/[\\.-]/_/g} 将文件名中的.和-换成_
${TM_FILENAME/(.*)/${1:/upcase}/} 将文件名完全转为大写
${TM_FILENAME/[^0-9^a-z]//gi} 删除非字母和数字的字符,包括符号