vscode-自动生成代码

Posted by 周思进 on July 6, 2020

上周同事分享了用 eclipse 在自动创建头文件时,会自动生成如下宏定义代码

#ifndef __TEST_H
#define __TEST_H


#endif

感叹还能这样提高自己的工作效率~
在工作中,多想想哪些是可以自动化做掉的,就尽量去实现自动化操作,提高自己的工作效率。

因为在转 vscode 使用,所以搜索了解了下 vscode 可以通过配置用户代码片段来实现类似功能,看完真是觉得这实在太好用了。

下面简单说说配置操作。

打开命令面板(通过 F1 命令或者 cmd + shift + p ),搜索“配置用户代码片段(configure user snippets)”并回车,或者直接点击 vscode 左下角那个配置按钮,然后选择用户代码片段。

接着选择新建全局代码片段,这里一开始选择语言c,但后面发现定义的头文件宏没法在头文件里使用,应该只有针对 .c 后缀文件使用,选择了全局代码片段定义则可以在头文件使用。

默认文档直接给了示例

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

“Print to console” 是这个代码片段的名字,这个名字需要保证是这个文档中唯一的。

scope : 用于指定这个代码片段的适用的语言范围,用逗号隔开,如果不写,则表示应用于所有语言。

prefix : 这个则是你在编写代码时只要输入其对应的值,则会提示可插入该代码片段。(通过敲 tab 键插入)

body : 具体的代码片段了。如果是多行,则需要用中括号括起来,每行代码需要用双引号括起来,并用逗号结尾。

其中 $1 和 $2 是 tab stop ,当按下 tab 键之后,光标会先移动到 1 这个位置,再按一次 tab 键,则会跳到 2 这个位置,如果不需要做任何修改,可以直接按 esc 键退出编辑模式。

description :对代码片段的功能描述,可有可无

了解这些,基本可以编写一些简单的代码片段了,比如调试打印,基本会希望打印出对应的文件、函数、行号,则可以定义如下这样的代码片段。

    "debug": {
		"prefix": "debug",
		"body": [
			"printf(\" %s %s %d  $1  \\n\", __file__, __func__, __LINE__ $2);",
		],
		"description": "Log output to console"
	}

不过最后开头说的定义头文件对应的宏还是直接网上搜的,做了点修改,如下:

    "#ifndef … #define … #endif": {
        "prefix": "def",
        "body": [
            "#ifndef ${1:${TM_FILENAME_BASE/(.*)/_${1:/upcase}_H/i}}", 
            "#define $1 ",
            "#ifdef __cplusplus",
            "extern \"C\" {",
            "#endif\n\n\n",
            "#ifdef __cplusplus",
            "}",
            "#endif",
            "#endif"
        ]
    },

该功能真的可以好好利用起来。