摘自:[VS Code]跟我一起在Visual Studio Code 添加自定义snippet(代码段),附详细配置
3.2 详细文法
3.2.1 Snippet 结构
然而以上格式只是提供了较为基础的功能,实际上 VSCode 的代码段引擎所能做的远不止这些。本文将以官方教程1为本,对此进行详实地阐述。
snippet 由三部分组成:
- prefix:前缀,定义了 snippets 从 IntelliSense 中呼出的关键字;
- body: 主体,即模板的主体内容,其中每个字符串表示一行;
- description:说明,会在 IntelliSense 候选栏中出现。未定义的情况下直接显示对象名,上例中将会显示
Print to console
。
3.2.2 Snippet 结构 - Body 部分
组成 Snippet 的 body 部分可以使用特殊语法结构,来控制光标和要插入的文本,其支持的特性及其文法如下:
Tabstops:制表符
用「Tabstops」可以让编辑器的指针在 snippet 内跳转。使用
$1
,$2
等指定光标位置。这些数字指定了光标跳转的顺序。特别地,$0
表示最终光标位置。相同序号的「Tabstops」被链接在一起,将会同步更新,比如下列用于生成头文件封装的 snippet 被替换到编辑器上时,光标就将同时出现在所有$1
位置。"#ifndef $1" "#define $1" "#end // $1"
- 1
- 2
- 3
Placeholders:占位符
「Placeholder」是带有默认值的「Tabstops」,如
${1:foo}
。「placeholder」文本将被插入「Tabstops」位置,并在跳转时被全选,以方便修改。占位符还可以嵌套,例如${1:another ${2:placeholder}}
。比如,结构体的 snippet 主体可以这样写:
struct ${1:name_t} {\n\t$2\n};
- 1
作为「Placeholder」的
name_t
一方面可以提供默认的结构名称,另一方面可以作为输入的提示。Choice:可选项
「Choice」是提供可选值的「Placeholder」。其语法为一系列用逗号隔开,并最终被两个竖线圈起来的枚举值,比如
${1|one,two,three|}
。当光标跳转到该位置的时候,用户将会被提供多个值(one 或 two 或 three)以供选择。Variables:变量
使用
$name
或${name:default}
可以插入变量的值。当变量未赋值时(如),将插入其缺省值或空字符串。 当varibale
未知(即,其名称未定义)时,将插入变量的名称,并将其转换为「Placeholder」。可以使用的「Variable」如下:TM_SELECTED_TEXT
:当前选定的文本或空字符串;
注:选定后通过在命令窗口点选「插入代码片段」插入。TM_CURRENT_LINE
:当前行的内容;TM_CURRENT_WORD
:光标所处单词或空字符串
注:所谓光标一般为文本输入处那条闪来闪去的竖线,该项可定制。单词使用 VSCode 选词(Word Wrap)器选择。你最好只用它选择英文单词,因为这个选择器明显没有针对宽字符优化过,它甚至无法识别宽字符的标点符号。TM_LINE_INDEX
:行号(从零开始);TM_LINE_NUMBER
:行号(从一开始);TM_FILENAME
:当前文档的文件名;TM_FILENAME_BASE
:当前文档的文件名(不含后缀名);TM_DIRECTORY
:当前文档所在目录;TM_FILEPATH
:当前文档的完整文件路径;CLIPBOARD
:当前剪贴板中内容。
此外,还有一些用于插入当前时间的变量,这里单独列出:
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
: 当前秒数。
注:这些都是变量名,不是宏,在实际使用的时要加上
$
符。