VSCode-用户代码片段

本文最后更新于:2020年11月5日 下午

信息

在编写代码的过程中使用用户代码片段能使得代码编写速度更快
ajax-snippet.gif
VSCode文档-用户代码片段:https://code.visualstudio.com/docs/editor/userdefinedsnippets

创建用户代码片段

创建代码片段文件

文件->首选项->用户片段

点击以后会出现一些选项,可以打开以前的代码片段文件进行修改,或者新建一个代码片段文件

代码片段文件

代码片段的编写语法就和JSON一样
支持编写C语言类型的注释(也就是”//“注释)
一个代码片段文件可以编写任意个代码片段

编写代码片段

在代码片段文件中写入用户代码片段
此处我以Python头举例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
{
"Python-Commom": {
"scope": "python",
"description": "Python声明头部,包含编码,解释器指定,文件信息",
"prefix": ["header"],
"body": [
"#!/usr/bin/env python",
"# -*- encoding: utf-8 -*-",
"'''",
"@File : $TM_FILENAME",
"@Time : $CURRENT_YEAR-$CURRENT_MONTH-$CURRENT_DATE",
"@Contact : https://github.com/RecluseXU",
"@Desc : $1",
"'''",
"",
"# here put the import lib",
"$0",
],
}
}
内容 说明
代码片段名 “Python-Commom” 仅仅是一个名字
“scope” “python” 代码段使用的语言名称列表
例如 “python,c”
“description” “Python声明……定,文件信息” 代码片段的描述,在使用时能够看到它,方便理解代码片段作用
“prefix” [“header”] 匹配关键词,可以填入多个
在你编写代码时填入部分匹配关键词时,会提示出用户代码片段
“body” [“#!/usr/bin/env py……put the import lib”,”$0”,] 代码片段内容,插入到原本代码中的代码片段
以list的形式记录,一个元素为一行内容
可以使用一些已经定义好了的变量来填充内容。例如:
$1代表每一次按Tab后光标跳跃到的位置
$0表示光标最终位置
$TM_FILENAME代表当前文件名

测试使用

代码片段语法

制表符 Tabstops

$0, $1, $2……
使用制表符能够在代码片段中用Tab键快速移动

  • 在数字大于0时,按照从小到大移动,既 $1-Tab->$2-Tab->$3
  • 最终,光标会Tab$0的位置,既最后的位置
  • 如果设置多个一样的制表符(比如在多个位置输入$1),那么会同时在多个地方输入

占位符 Placeholders

${1:foo}${2:what}……
存在默认值的制表符。如果你什么都不输入,直接Tab会使用占位符的值设置这个位置

选项 Choice

${1|one,two,three|}, ${2|op1,op2|}……
存在默认值的制表符。你可以选择,设定的值来填入

变量 Variables

编辑相关

变量 信息
TM_SELECTED_TEXT 当前选择的字符(没有则为空)
TM_CURRENT_LINE 当前行的内容
TM_CURRENT_WORD 当前光标下的单词(没有则为空)
TM_LINE_INDEX 从0开始的行序号
TM_LINE_NUMBER 从1开始的行号
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 时间戳

变量转换 Variable transforms

在代码片段正式插入到代码之中前,你可以对其中的变量的值,通过正则表达式进行一些替换处理

案例:去除文件名的扩展名

1
2
3
4
5
6
7
8
9
${TM_FILENAME/(.*)\\..+$/$1/}
| | | |
| | | |-> 替换内容为""
| | |
| | |-> 选择第一个被正则表达式匹配的内容
| |
| |-> 正则表达式匹配(.*)
|
|-> 通过变量得到文件名

案例:用_取代.

1
${TM_FILENAME/[\\.]/_/}

案例:用_取代.-

1
${TM_FILENAME/[\\.-]/_/g}

案例:将文件名改为大写字母

1
${TM_FILENAME/(.*)/${1:/upcase}/}

案例:只保留数字与字母

1
${TM_FILENAME/[^0-9^a-z]//gi}