VS code 建立代码片断

开始

点击左下角的设置javascript

img

点击"用户代码片断"->新建全局代码片断css

img

建立本身的代码段

能够定义本身的代码段,全局代码段或特定语言的代码段。 html

要打开片断文件进行编辑,请选择“ 文件” > “首选项” ( 代码 > “ macOS上的首选项 ”)下的“ 用户代码段 ” ,而后选择要显示片断的语言(按语言标识符 )或建立新的全局片断( 新的全局片断文件 ) 。html5

片断以JSON格式定义。 java

片断下拉列表

语法

举例 git

img

prefix :这个参数是使用代码段的快捷入口,好比这里的log在使用时输入log会有智能感知。github

zyx456:就是输入的关键字。

body:这个是代码段的主体。正则表达式

须要设置的代码放在这里,字符串间换行的话使用rn换行符隔开。typescript

注意若是值里包含特殊字符须要进行转义。json

多行语句的以,隔开。

$1 :这个为光标的所在位置。

$2 :使用这个参数后会光标的下一位置将会另起一行,按tab键可进行快速切换,还能够有$3,$4,$5。。。。。

description :代码段描述,在使用智能感知时的描述。

img

结果

img


HTML5模板举例

"html5": {
        "prefix": "html5",
        "body": [
            "<!DOCTYPE html>",
            "<html lang=\"zh-CN\">",
            "\t<head>",
            "\t\t<title>测试页</title>",
            "\t\t<meta charset=\"UTF-8\">",
            "\t\t<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">",
            "\t\t<link href=\"css/style.css\" rel=\"stylesheet\">",
            "\t</head>", 
            "\t<body>", 
            "\t$2", 
            "\t</body>", 
            "</html>"
        ],
        "description": "HTML - Defines a template for a html5 document",
    },

t表明空格。

“要用斜杠转义。

转义网址(+随机搜的)

http://www.bejson.com/


代码片断设置评论

有一些新的代码段变量能够插入行或块注释,以描述当前语言。

使用BLOCK_COMMENT_STARTBLOCK_COMMENT_END用于块注释等LINE_COMMENT

下面的代码段插入/* Hello World */JavaScript文件和<!-- Hello World -->HTML文件中

{
    "hello": {
        "scope": "javascript,html",
        "prefix": "hello",
        "body": "$BLOCK_COMMENT_START Hello World $BLOCK_COMMENT_END"
    }
}

从插件市场添加片断

VS Code Marketplace上的许多扩展包括代码段。

若是您找到了要使用的设备,请安装它并从新启动VS Code并使用新的代码段。



代码片断文件名

文件类型和名称用于定义片断是全局的仍是特定于语言的。

存储在以语言标识符<languageId>.json )命名的JSON文件中的代码段是特定于语言的。 例如,仅限JavaScript的代码段放在javascript.json文件中。

全局代码段

编辑时适用的全局代码段,并存储在<name>.code-snippets MyGlobal.code-snippets文件中,例如MyGlobal.code-snippets

全局代码段的JSON模式容许您定义scope属性,该属性能够过滤适用于该代码段的语言(基于语言标识符 )。

下面的示例再次是For Loop ,但此次它的范围是JavaScript 和 TypeScript。

{
    "For_Loop": {
        "prefix": "for",
        "scope": "javascript,typescript",
        "body": [
          "for (const ${2:element} of ${1:array}) {",
          "\t$0",
          "}"
        ],
        "description": "For Loop"
    }
}

添加新代码段后,您能够当即尝试,无需从新启动。

片断语法

代码段的body可使用特殊构造来控制游标和插入的文本。

如下是支持的功能及其语法:

制表位

使用tabstops,您可使编辑器光标在代码段内移动。 使用$1$2指定游标位置。

数字是访问tabstops的顺序,而$0表示最终光标位置。

同一个tabstop的屡次出现被连接并同步更新。

zyx456:就是tab按键。

占位符

占位符是带有值的tabstops,例如${1:foo} 。 将插入并选择占位符文本,以即可以轻松更改。 占位符能够嵌套,例如${1:another ${2:placeholder}}

zyx456:就是带有默认值的插糟。

选择

占位符能够做为值进行选择。 语法是逗号分隔的值枚举,用管道字符括起来,例如${1|one,two,three|}

插入代码段并选择占位符后,选项将提示用户选择其中一个值。

变量

使用$name${name:default},您能够插入变量的值。

未设置变量时,将插入其默认值或空字符串。

当变量未知(即,未定义其名称)时,将插入变量的名称并将其转换为占位符。

可使用如下变量:

  • 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剪贴板的内容

用于插入当前日期和时间:

  • CURRENT_YEAR当前年份
  • CURRENT_YEAR_SHORT当前年份的最后两位数字
  • CURRENT_MONTH两个数字的月份(例如'02')
  • CURRENT_MONTH_NAME月份的全名(例如“七月”)
  • CURRENT_MONTH_NAME_SHORT月份的简称(例如'Jul')
  • CURRENT_DATE每个月的某一天
  • CURRENT_DAY_NAME天的名称(例如'星期一')
  • CURRENT_DAY_NAME_SHORT当天的简称(例如'Mon')
  • CURRENT_HOUR 24小时制格式的当前小时
  • CURRENT_MINUTE当前分钟
  • CURRENT_SECOND当前秒

变量变换

转换容许您在插入变量以前修改变量的值。 转型的定义包括三个部分:

  1. 与变量值匹配的正则表达式,或没法解析变量时的空字符串。
  2. “格式字符串”,容许从正则表达式引用匹配组。 格式字符串容许条件插入和简单修改。
  3. 传递给正则表达式的选项。

下面的示例插入当前文件的名称而不是其结尾,所以从foo.txt它会生成foo

${TM_FILENAME/(.*)\\..+$/$1/}
  |           |         |  |
  |           |         |  |-> no options
  |           |         |
  |           |         |-> references the contents of the first
  |           |             capture group
  |           |
  |           |-> regex to capture everything before
  |               the final `.suffix`
  |
  |-> resolves to the filename

占位符,变换

与变量转换同样,占位符的转换容许在移动到下一个制表位时更改占位符的插入文本。

插入的文本与正则表达式匹配,匹配或匹配 - 取决于选项 - 将替换为指定的替换格式文本。 每次出现占位符均可以使用第一个占位符的值独立定义本身的转换。

Placeholder-Transforms的格式与Variable-Transforms的格式相同。

转换例子

这些示例显示在双引号内,由于它们会显示在代码段内,以说明须要双重转义某些字符。

示例转换以及文件名example-123.456-TEST.js的结果输出。

产量 说明
"${TM_FILENAME/[\\.]/_/}" example-123_456-TEST.js 替换第一个._
"${TM_FILENAME/[\\.-]/_/g}" example_123_456_TEST_js 替换每一个.-_
"${TM_FILENAME/(.*)/${1:/upcase}/}" EXAMPLE-123.456-TEST.JS 改成所有大写
"${TM_FILENAME/[^0-9^az]//gi}" example123456TESTjs 删除非字母数字字符

语法

下面是片断的EBNF( 扩展Backus-Naur形式 )。 使用\ (反斜杠),您能够转义$}\ 。 在选择元素中,反斜杠也会转义逗号和管道字符。

any         ::= tabstop | placeholder | choice | variable | text
tabstop     ::= '$' int
                | '${' int '}'
                | '${' int  transform '}'
placeholder ::= '${' int ':' any '}'
choice      ::= '${' int '|' text (',' text)* '|}'
variable    ::= '$' var | '${' var '}'
                | '${' var ':' any '}'
                | '${' var transform '}'
transform   ::= '/' regex '/' (format | text)+ '/' options
format      ::= '$' int | '${' int '}'
                | '${' int ':' '/upcase' | '/downcase' | '/capitalize' '}'
                | '${' int ':+' if '}'
                | '${' int ':?' if ':' else '}'
                | '${' int ':-' else '}' | '${' int ':' else '}'
regex       ::= JavaScript Regular Expression value (ctor-string)
options     ::= JavaScript Regular Expression option (ctor-options)
var         ::= [_a-zA-Z] [_a-zA-Z0-9]*
int         ::= [0-9]+
text        ::= .*

将键绑定分配给片断

您能够建立自定义键绑定以插入特定代码段。

打开keybindings.json ( 首选项:打开键盘快捷键文件 ),它定义了全部的键绑定,并添加了一个键盘绑定,将"snippet"做为额外参数传递:

{
  "key": "cmd+k 1",
  "command": "editor.action.insertSnippet",
  "when": "editorTextFocus",
  "args": {
    "snippet": "console.log($1)$0"
  }
}

键绑定将调用Insert Snippet命令,但不会提示您选择片断,而是会插入提供的片断。 您能够像往常同样使用键盘快捷键,命令ID和可选的when子句上下文定义自定义键绑定 ,以启用键盘快捷键。

此外,您可使用langIdname参数引用现有代码段,而不是使用snippet参数值来定义内联代码段:

{
  "key": "cmd+k 1",
  "command": "editor.action.insertSnippet",
  "when": "editorTextFocus",
  "args": {
    "langId": "csharp",
    "name": "myFavSnippet"
  }
}

将本身的代码片断转为共享扩展

地址:contributes.snippets

使用Preferences: Configure User Snippets命令建立和测试您的片断。

img

  • 对代码段感到满意后,将整个JSON文件复制到扩展文件夹中,例如 snippets.json
  • 将如下代码段添加到您的 package.json
{
  "contributes": {
    "snippets": [
      {
        "language": "javascript",
        "path": "./snippets.json"
      }
    ]
  }
}

您能够在如下位置找到完整的源代码:https://github.com/Microsoft/vscode-extension-samples/tree/master/snippet-sample

实例

snippets.json

{
    "Print to console": {
        "prefix": "log",
        "body": [
            "console.log('$1');",
            "$2"
        ],
        "description": "Log output to console"
    }
}

package.json

{
    "name": "snippet-sample",
    "displayName": "Snippet Sample",
    "description": "Snippet Sample",
    "version": "0.0.1",
    "publisher": "vscode-samples",
    "engines": {
        "vscode": "^1.28.0"
    },
    "categories": [
        "Snippets"
    ],
    "contributes": {
        "snippets": [
            {
                "language": "javascript",
                "path": "./snippets.json"
            }
        ]
    }
}
相关文章
相关标签/搜索