vscode snippets
学习snippets目的
- 提升开发效率
- 使自己代码看起来越加整洁,让自己爽,让别人爽
- 装**
进门方法
使用快捷键ctrl+shift+p,打开命令窗口,输入nippets,配置代码片段
snippets分类
- 全局代码片段,级只要能用vscode打开且编辑的文档均可使用
- 指定编程语言的snippets,比如cxx对应的file name是cpp.json,此方法只能在指定的代码文件中使用,系统使用后缀名判定
举例
在代码中输入main,弹出候选框
选择确认,自动补全替换代码
语法
先拿出一个例子,有图有真相,有图好说话
"main": {
"prefix": "main",
"body": [
"int main(int argc, char const *argv[])",
"{",
" ${1:/* code */}",
" return 0;",
"}\n"
],
"description": "Code snippet for main()"
}
注:照猫画虎就好,如果想学json语法,请自行脑补
-
整个文件就是一个json对象,{}
-
每一个代码片段就是json对象中一个子对象,”main“就是key,‘:’后就是value
-
prefix(必须):shortcuts,说人话就是触发代码片段的快捷键
-
body(必须):替换的代码主体(把你输入的触发代码替换)
-
description(
非必须):就是你给自己代码一个简单描述,图片中显示的那里就是"Header Include-Guard": { "prefix": "guard", "body": "#ifndef ${1}\n#define $1\n\n${2}\n\n#endif /* end of include guard: $1 */\n" }
-
body其实也是一个json对象,其中value可以是一个字符串,也可以是一个数组
-
排版随意,建议漂亮点,可以使用,但是底限是语法要正确。
占位符
-
$0是结束位置,不是第一个位置。
$0是结束位置,不是第一个位置。
$0是结束位置,不是第一个位置。
-
$n,表示第n个位置,比如$1表示光标自动跳转到的位置,切换位置使用tab,可依据自己习惯配置。
-
光标跳转期间,遇到$0,则跳转表示结束了,跳转此后失效。
-
占位符可以存在默认值,使用${n:xxx},比如举例中main的$
-
占位符不限制默认参数数量,可以存在多个,光标到这个位置是,会列出所有选项供你选择
"function comment": { "prefix": "fc", "body": [ "/**********************************************************************", " * @brief ${1:function_name}", " * @return false:$2, true:$3}", " * @param ${4|void,bool,int,double,string|}", " **********************************************************************/$0", ], "description": "function comment" }
效果如图:
变量
-
文件相关变量
变量名 变量存在的意义 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
月份的全名(例如'June')(中文语言对应六月) CURRENT_MONTH_NAME_SHORT
月份的简称(例如'Jun')(中文语言对应是6月) CURRENT_DATE
这个月的哪一天 CURRENT_DAY_NAME
当天是星期几(例如'星期一') CURRENT_DAY_NAME_SHORT
当天是星期几的简称(例如'Mon')(中文对应周一) CURRENT_HOUR
24小时时钟格式的当前小时 CURRENT_MINUTE
当前分 CURRENT_SECOND
当前秒 -
注释相关变量(没感觉到存在意义,可能我没找到合适的场景吧)
变量名 变量存在的意义 BLOCK_COMMENT_START
输出:PHP /*或HTML格式<!-- BLOCK_COMMENT_END
输出:PHP */或HTML格式--> LINE_COMMENT
输出:PHP //或HTML格式
注:是变量名,而不是宏,请使用$进行取值操作
其他语法
自己探索刚高深的语法吧,只要能帮到自己。
附常用的snippets
{
"file header comments": {
"prefix": "fhc",
"body": [
"/***********************************************************************",
" * @file $TM_FILENAME",
" * @ingroup ${1:${TM_FILENAME_BASE/(.*)/${1:/downcase}/i}}",
" * @author fl",
" * @date $CURRENT_YEAR-$CURRENT_MONTH-$CURRENT_DATE",
" * @brief ${2:$TM_FILENAME file}",
"***********************************************************************/\n",
"$0"
]
},
"function comment": {
"prefix": "fc",
"body": [
"/**********************************************************************",
" * @brief ${1:function_name}",
" * @return false:$2, true:$3}",
" * @param ${4|void,bool,int,double,string|}",
" **********************************************************************/$0"
],
"description": "function comment"
},
"define c type for cpp file": {
"prefix": "externc",
"body": [
"#ifdef __cplusplus",
"extern \"C\" {",
"#endif \n",
"$0",
"#ifdef __cplusplus",
"}",
"#endif //__cplusplus"
]
},
"Typedef": {
"prefix": "td",
"body": "typedef ${1:int} ${2:MyCustomType};"
},
"Typedef Struct": {
"prefix": "tds",
"body": "typedef struct \n{\n\t$1\n}${2:MyCustomType};"
},
"printf": {
"prefix": "print",
"body": "printf(\"${1:%s }\\n\", $2);$3"
},
"void function": {
"prefix": "voidf",
"body": "void ${1:f}($2) \n{\n\t$3\n}"
},
"int function": {
"prefix": "intf",
"body": "int ${1:f}($2) \n{\n\t$3\n}"
},
"any function": {
"prefix": "func",
"body": "${1:int} ${2:name}($3) \n{\n\t$5\n\treturn ${4:0};\n}"
},
"#define": {
"prefix": "#def",
"body": "#define ${1}\t\t\t${2:0}\t// $1\n$0"
},
"#ifdef": {
"prefix": "#ifdef",
"body": "#ifdef $1\n\n\n#endif // $1\n$0"
},
"#ifndef": {
"prefix": "#ifndef",
"body": "#ifndef $1\n\n\n#endif // $1\n$0"
},
"#include <>": {
"prefix": "#Inc",
"body": "#include <${1:.h}>"
},
"#include \"\"": {
"prefix": "#inc",
"body": "#include \"${1:.h}\""
},
"Define and For Loop": {
"prefix": "dfor",
"body": "size_t ${1:i};\nfor (${1:i} = ${2:0}; ${1:i} < ${3:count}; ${1:i}${4:++}) {\n\t$5\n}"
},
"Header Include-Guard": {
"prefix": "guard",
"body": "#ifndef ${1}\n#define $1\n\n${2}\n\n#endif /* end of include guard: $1 */\n"
},
"Do While Loop": {
"prefix": "do",
"body": "do {\n\t$0\n} while($1);"
},
"fprintf": {
"prefix": "fprintf",
"body": "fprintf(${1:stderr}, \"${2:%s}\\\\n\", $3);$4"
},
"scanf": {
"prefix": "scanf",
"body": "scanf(\"${1:%s}\\n\", $2);$3"
},
"Struct": {
"prefix": "st",
"body": "struct ${1:name_t} {\n\t$2\n};"
},
"write file": {
"prefix": "wf",
"body": "FILE *${1:fp};\n${1:fp} = fopen (\"${2:filename.txt}\",\"w\");\nif (${1:fp}!=NULL)\n{\n\tfprintf(${1:fp},\"${3:Some String\\\\n}\");\n\tfclose (${1:fp});\n}"
},
"read file": {
"prefix": "rf",
"body": "FILE *${1:fp};\n${1:fp} = fopen (\"${2:filename.txt}\",\"r\");\nif (${1:fp}!=NULL)\n{\n\tfscanf(${1:fp},\"${3:Some String\\\\n}\", ${3:&var});\n\tfclose (${1:fp});\n}",
"description": "read file opeartion including fopen, fscanf and fclose."
},
"main": {
"prefix": "main",
"body": [
"int main(int argc, char const *argv[])",
"{",
"\t${1:/* code */}",
"\treturn 0;",
"}\n"
],
"description": "main(…)"
},
"do": {
"prefix": "do",
"body": "do\n{\n\t${1:/* code */}\n} while (${2:/* condition */});\n",
"description": "Do While Loop "
},
"while": {
"prefix": "while",
"body": "while(${1:/* condition */})\n{\n\t${2:/* code */}\n}\n",
"description": "While Loop"
},
"for": {
"prefix": "for",
"body": "for(int ${1:i} = 0; ${1:i} < ${2:count}; ${1:i}++)\n{\n\t${3:/* code */}\n}\n",
"description": "For Loop "
},
"if": {
"prefix": "if",
"body": "if(${1:/* condition */})\n{\n\t${0:/* code */}\n}\n",
"description": "if(…)"
},
"else": {
"prefix": "else",
"body": "else \n{\n\t${1:/* code */}\n}",
"description": "else {…}"
},
"elseif": {
"prefix": "elseif",
"body": "else if(${1:/* condition */})\n{\n\t${0:/* code */}\n}\n",
"description": "else if(…)"
},
"ifelse": {
"prefix": "ifelse",
"body": "if(${1:/* condition */})\n{\n\t${2:/* code */}\n} else\n{\n\t${0:/* code */}\n}\n",
"description": "if(…) else"
},
"ifelif": {
"prefix": "ifelif",
"body": "if(${1:/* condition */})\n{\n\t${2:/* code */}\n} else if(${3:/* condition */})\n{\n\t${4:/* code */}\n} else\n{\n\t${0:/* code */}\n}\n",
"description": "if(…) else if(…) else"
},
"forever": {
"prefix": "forev",
"body": "for(;;)\n{\n\t${0:/* code */}\n}\n",
"description": "Forever Loop"
},
"return": {
"prefix": "return",
"body": "return ${1:/* code */};",
"description": "return"
},
"switch": {
"prefix": "switch",
"body": [
"switch (${1})",
"{",
"case ${2: /*case*/}:",
"\t$3",
"\tbreak;",
"default:",
"\tbreak;",
"}"
],
"description": "switch {...}"
},
"case": {
"prefix": "case",
"body": [
"case ${1: /*case*/}:",
"\t$2",
"\tbreak;"
],
"description": "case (...)"
},
"enum": {
"prefix": "enum",
"body": [
"enum ${1:}",
"{",
"\t$2",
"};\n"
],
"description": "enum ..."
},
"struct": {
"prefix": "struct",
"body": [
"struct ${1}",
"{",
"\t$2",
"};\n"
],
"description": "struct ..."
},
"union": {
"prefix": "union",
"body": [
"union ${1}",
"{",
"\t$2",
"};"
],
"description": "union {...}"
},
"#include": {
"prefix": "#include",
"body": "#include <$1>",
"description": "#include <..>"
},
"#ifelif": {
"prefix": "#ifelif",
"body": [
"#if $1",
"\t$3",
"#elif $2",
"\t$4",
"#endif"
]
}
}
本文来自博客园,作者:flxx,转载请注明原文链接:https://www.cnblogs.com/faithlocus/p/12695207.html