[VS Code]VSCode 添加用户代码段

摘自:[VS Code]跟我一起在Visual Studio Code 添加自定义snippet(代码段),附详细配置


3.2 详细文法

3.2.1 Snippet 结构

然而以上格式只是提供了较为基础的功能,实际上 VSCode 的代码段引擎所能做的远不止这些。本文将以官方教程1为本,对此进行详实地阐述。

snippet 由三部分组成:

  1. prefix:前缀,定义了 snippets 从 IntelliSense 中呼出的关键字;
  2. body: 主体,即模板的主体内容,其中每个字符串表示一行;
  3. 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: 当前秒数。

    注:这些都是变量名,不是宏,在实际使用的时要加上 $ 符。

你可能感兴趣的:(Interesting)