前言

我之前使用IDEA习惯选中代码块,接着通过快捷键Ctrl+Alt+T使用一个叫[Surround With…]的功能快捷添加捕获异常的语句try catch、try except,换成VS Code使用方法稍微不一样,经过摸索后找到以下两种方法。

正文

VS Code内置的代码片段自定义

选中File > Preferences (Code > Preferences on macOS) > User Snippets,接着会弹出代码片段设置面板。其中有一个选项New Global Snippets file,这是定义全局代码片段,也就是这个代码片段所有语言可用。

如果要定义适用于特定语言的代码片段,要选择特定语言,比如说python,首次定义会自动新建一个python.json的配置文件,所有配置和VS Code Setting一样,遵循JSON语法。

如刚新建的配置文件的注释包含示例所示,一个代码片段由三个配置项组成,这里以一个python代码片段示例进行说明。

"try except":{
    //数组配置项,可选。这既是通过命令面板插入代码片段的名字标识,也是触发代码片段自动补全的关键词。
    //这里输入try的时候就会出现这个代码片段的提示,或者通过te也能够匹配到try-except,触发这个代码片段。
    "prefix":["try","try-except"]

    //数组配置项,必填。这是代码片段定义,语法参考https://code.visualstudio.com/docs/editor/userdefinedsnippets#_create-your-own-snippets
    //每一个数组元素占用一行,所以这个代码片段由4行代码组成。
    //python是通过缩进区分一个代码块,这里在第2行第4行分别插入了一个制表符。
    //其中第二行插入了一个内置变量$TM_SELECTED_TEXT,表示当前选中的代码块,变量在这里的作用就是通过try...except...包裹选中的代码块。
    //第三行${1:Error}插入了一个Error变量,这里表示通过变量定义一个异常类,插入代码片段的时候可改变这个值。
		"body": ["try:",
    "\t$TM_SELECTED_TEXT",
    "except ${1:Error} as e:",
    "\t$BLOCK_COMMENT_START 处理异常 $BLOCK_COMMENT_END"],

    //字符串配置项,可选。代码片段说明。
		"description": "try...except..."
	}

使用这个代码片段只需要在代码里输入上述定义的触发关键词,就能通过代码自动补全提示插入,还可以通过Ctrl+Shift+P打开命令面板,输入Insert Snippet并选中,就会弹出适用于当前语言的代码片段,点击可插入。

接下来再说说使用Surround定义代码片段的方法。

使用Surround扩展定义代码片段

Surround的使用方法比较简单,因为它本身就内置了常用的代码片段,ifElse、tryCatch、tryFinally、forEach等等,这里主要讲的是如何自定义代码片段,语法其实跟第一个方法差不多。

首先Ctrl+,打开Setting菜单,搜索框输入Surround:Custom,查找Surround的自定义代码片段配置。选中Edit in settings.json,自动打开settings.json。如果之前没有自定义代码片段,会自动创建一个surround.custom的json key,以后的所有代码片段都是在这个json key下面定义。

一个代码片段配置项有如下定义:

interface ISurroundItem {
  //这是代码片段的名字,作为添加代码片段的菜单项名字,自定义的每个代码片段名字必须唯一,必要配置项
  label: string;
  //代码片段的介绍,可选配置项
  description?: string;
  //作用???,可选配置项
  detail?: string;
  //代码片段定义,语法看https://code.visualstudio.com/docs/editor/userdefinedsnippets#_snippet-syntax
  //必要配置项
  snippet: string; 
  //禁用状态,默认启用
  disabled?: boolean;
  //代码片段语言作用域,可填写html, typescript,python等等,更多的languageId详看https://code.visualstudio.com/docs/languages/identifiers#_known-language-identifiers,让片段适用于一种语言以上,还有通配符“*”表示所有语言可匹配此代码片段。
  //可选配置项
  languageIds?: string[];
}

这里是一个在python语言下使用的一个异常语句块片段示例:

"tryExcept": {
          "label": "tryExcept",
          "snippet": "try:\n\t$TM_SELECTED_TEXT\nexcept $0 as e:\n\traise Exception(e)",
          "languageIds": ["python"]
        }

定义完成后,使用这个代码片段只需要,选中要捕获异常的代码块,按下Ctrl+Shift+T,输入try就可以快速筛选到自定义的异常捕获代码片段。

至此介绍完两种自定义代码片段的方法,实际应用按自己喜好习惯选择即可。

参考