前言
为什么突然会出这么一篇文章呢?
前两天博主在搞自己的个人博客,经过各方面的比对之后,决定选用Hexo来进行搭建。跟着教程走完一套搭建之后,发现在写文章前会出现很多通用的配置。而这些配置如果单纯的CV对时间的损耗很大。由此产生了使用代码片段的想法。并打开了新世界的大门。
什么是代码片段
代码片段是小块可重用代码,可通过右键单击菜单(关联菜单)命令或热键组合插入到代码文件中。 代码片段通常包含常用的代码块(如
try-finally 或
if-else 块),可用于插入整个类或方法。
简单来说:就是我们经常需要复制粘贴的基础代码
其实我们在开发之中经常使用代码片段,只是那些都是插件里面别人已经写好的,我们直接用就好了。比如这样的:
上图中,我们在创建一个vue项目时,vueInit
就会弹出提醒,选择之后就已经直接给我们搭建好了。这就是代码片段的功效。并且这个还是相对基础的功能,代码片段的世界,比我们想象的庞大的多。
如何创建属于自己的代码片段
创建代码片段的方式很简单,笔者这里使用VScode来举例。
步骤:
- 打开VScode,点击左下角的小齿轮
- 选中
配置用户代码片段
- 在弹出框之中选择
新代码片段
- 设置代码片段的名称
- 进行代码片段的编写
代码片段格式是这样的:
{
"Print to console": {
"prefix": "hexoMdInit", // 这里是关键字,设置之后,在文件中敲击这几个关键字会出现提示,选择则出现下面body中设置的代码
"scope": "Markdown,markdown", // 这里是范围,可以限制只在这几个文件类型之中进行代码片段的使用
"body": [ // 这里是代码片段的主要部分,其中 ${1},${2},代表代码片段生成之后鼠标的位置,Tab间会跳转到下一个位置。
"---",
"title: ${1:${TM_FILENAME/['.md']//g}} ",
"date: $CURRENT_YEAR-$CURRENT_MONTH-$CURRENT_DATE $CURRENT_HOUR:$CURRENT_MINUTE:$CURRENT_SECOND",
"tags: ${3}",
"---",
"",
"",
"${0}"
],
"description": "Create hexo article template"
}
}
上面是我按照hexo文章格式创建的基础片段。他的功能在于:
- 输入
hexoMdInit
产生代码片段。 - 该指令只在 md 文档中会出现
- 产生内容中 date 将
自动写入当前的时间
- 产生内容的 title 将
自动写入文件名称
且将后缀.md
去除
除此之外,官方还提供了一些变量相关的参数。并且可以根据正则表达式进行一定程度的修改。
变量
使用$name
or ${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
当前文档的完整文件路径RELATIVE_FILEPATH
当前文档的相对(相对于打开的工作区或文件夹)文件路径CLIPBOARD
剪贴板的内容WORKSPACE_NAME
打开的工作区或文件夹的名称WORKSPACE_FOLDER
打开的工作空间或文件夹的路径CURSOR_INDEX
基于零索引的游标号CURSOR_NUMBER
基于单索引的游标号
插入当前日期和时间:
CURRENT_YEAR
本年度CURRENT_YEAR_SHORT
本年度的最后两位数CURRENT_MONTH
两位数的月份(例如“02”)CURRENT_MONTH_NAME
月份的全名(例如“七月”)CURRENT_MONTH_NAME_SHORT
月份的简称(例如“Jul”)CURRENT_DATE
两位数的月份日期(例如“08”)CURRENT_DAY_NAME
日期名称(例如“星期一”)CURRENT_DAY_NAME_SHORT
当天的简称(例如“周一”)CURRENT_HOUR
24 小时制格式的当前小时CURRENT_MINUTE
当前分钟为两位数CURRENT_SECOND
当前秒为两位数CURRENT_SECONDS_UNIX
自 Unix 纪元以来的秒数
对于插入随机值:
RANDOM
6 个随机 Base-10 数字RANDOM_HEX
6 个随机 Base-16 位UUID
版本 4 UUID
对于插入行或块注释,尊重当前语言:
BLOCK_COMMENT_START
示例输出:PHP/*
或 HTML<!--
BLOCK_COMMENT_END
示例输出:PHP*/
或 HTML-->
LINE_COMMENT
示例输出:在 PHP 中//
变量变换
转换允许您在插入变量之前修改它的值。转换的定义由三部分组成:
- 与变量值匹配的正则表达式,或者当变量无法解析时为空字符串。
- 允许从正则表达式引用匹配组的“格式字符串”。格式字符串允许有条件的插入和简单的修改。
- 传递给正则表达式的选项。
例子 | 输出 | 解释 |
---|---|---|
"${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^a-z]//gi}" | example123456TESTjs | 删除非字母数字字符 |