vscode插件开发(语言类)
创始人
2025-06-01 05:19:08
0

目录

    • 项目初始化
    • 项目介绍
    • 如何调试
    • 高亮配置
    • 自定义主题
    • 自动补全
    • 打包、本地测试
    • 添加插件图标
    • 插件名称有undefined
    • 结尾

项目初始化

    环境

node:16.19.1
npm:8.19.3
windows11

    安装脚手架

npm install -g yo generator-code

    创建项目

yo code

    项目类型:本例选择新语言支持,参考下面两张图

在这里插入图片描述
在这里插入图片描述

项目介绍

    目录介绍
在这里插入图片描述
    package.json详细介绍
在这里插入图片描述
    高亮配置json详细介绍,更多可见文件中的json配置项解释,或者点击这里
在这里插入图片描述

如何调试

在这里插入图片描述
    点击绿色三角运行后会自动弹出调试界面
在这里插入图片描述
    因为在项目初始化/配置中设定了.fwhf的后缀文件,所以咱们可以创建一个test.fwhf文件,并在文件中输入if以及一些其他字符。
在这里插入图片描述
    为什么if、{}有颜色,其他的没颜色呢?咱们接着往下看

高亮配置

    上文中已经提到过高亮配置文件,咱们一起再看一遍。
在这里插入图片描述
    不知道有没有小伙伴看到keyword下的match匹配中出现了if,那我们尝试在match中加入abc,重新运行,并在test.fwhf中写入abc观察是否会变色。
在这里插入图片描述
在这里插入图片描述
    完美!现在都是紫色(不同的vscode主题可能表现不一致),那我们想要别的颜色怎么办?在上文高亮配置json详细介绍中提到高亮颜色按名称匹配,那我们尝试修改name试试(这里需要特别注意,name要选择配置json链接内推荐选项,否则需要添加自定义主题文件,下文介绍)。

"enum": ["comment","comment.block","comment.block.documentation","comment.line","comment.line.double-dash","comment.line.double-slash","comment.line.number-sign","comment.line.percentage","constant","constant.character","constant.character.escape","constant.language","constant.numeric","constant.other","constant.regexp","constant.rgb-value","constant.sha.git-rebase","emphasis","entity","entity.name","entity.name.class","entity.name.function","entity.name.method","entity.name.section","entity.name.selector","entity.name.tag","entity.name.type","entity.other","entity.other.attribute-name","entity.other.inherited-class","header","invalid","invalid.deprecated","invalid.illegal","keyword","keyword.control","keyword.control.less","keyword.operator","keyword.operator.new","keyword.other","keyword.other.unit","markup","markup.bold","markup.changed","markup.deleted","markup.heading","markup.inline.raw","markup.inserted","markup.italic","markup.list","markup.list.numbered","markup.list.unnumbered","markup.other","markup.punctuation.list.beginning","markup.punctuation.quote.beginning","markup.quote","markup.raw","markup.underline","markup.underline.link","meta","meta.cast","meta.parameter.type.variable","meta.preprocessor","meta.preprocessor.numeric","meta.preprocessor.string","meta.return-type","meta.selector","meta.structure.dictionary.key.python","meta.tag","meta.type.annotation","meta.type.name","metatag.php","storage","storage.modifier","storage.modifier.import.java","storage.modifier.package.java","storage.type","storage.type.cs","storage.type.java","string","string.html","string.interpolated","string.jade","string.other","string.quoted","string.quoted.double","string.quoted.other","string.quoted.single","string.quoted.triple","string.regexp","string.unquoted","string.xml","string.yaml","strong","support","support.class","support.constant","support.function","support.function.git-rebase","support.other","support.property-value","support.type","support.type.property-name","support.type.property-name.css","support.type.property-name.less","support.type.property-name.scss","support.variable","variable","variable.language","variable.name","variable.other","variable.parameter"
]

    此处我选择了constant.character,重新执行后可见由紫色变为了蓝色。
在这里插入图片描述
在这里插入图片描述
    可能又有细心的小伙伴发现我的name是constant.character.fwhf,而不是constant.character,而且json推荐字段中也没有constant.character.fwhf,为什么还会有颜色呢?那是因为name的匹配规则是按层级优先匹配的,如果constant.character.fwhf匹配不到,他则是匹配上一层的constant.character,如果匹配不到则继续上一层constant,最后都匹配不到则使用默认色,比如上图中的白色。
    此处记录几个规则匹配写法,以供大家参考

"keywords": {"patterns": [{"name": "keyword.system.properties.fwhf","match": "\\b(aaa|bbb|ccc)\\b"},]
},
"functions": {"patterns": [{"name": "functions.command.fwhf","begin": "\\b((func1|func2|func3)\\s*\\()","end": "(\\))","beginCaptures": {"1": {"name": "entity.name.class.command"}},"patterns": [{"include": "#expressions"}]},]
},
"symbols": {"patterns": [{"name": "comment.line.fwhf","match": "(\\/\\/.*|\\/\\*.*\\*\\/)"},{"name": "keyword.operator.fwhf","match": "(==|!=|&&|\\|\\||!|\\+|\\-|\\*|\\/|\\%)"},{"name": "string.fwhf","match": "((\"([^\"]*)\")|(\\'([^\\']*)\\'))"}]
},
"numbers": {"patterns": [{"name": "constant.numeric","match": "\\b([0-9]+)\\b"}]
},
"expressions": {"patterns": [{"include": "#keywords"},{"include": "#functions"},{"include": "#symbols"},{"include": "#numbers"}]
}

    此处对于上文中的functions特别解释一下,“beginCaptures”的意思是匹配开始的括号,“1”则代表第一个开始括号(包含括号),“patterns”的意思是begin与end之间的内用交给“#expressions”处理。

自定义主题

    package.json中添加themes字段,并创建对应json

"themes": [{"label": "fwhf-dark-themes","uiTheme": "vs-dark","path": "./colorthemes/fwhf-color-theme.json"
}]

在这里插入图片描述在这里插入图片描述
    主题json文件详解

{"name": "fwhf.theme","colors": {"editor.foreground": "#fff","editorBracketHighlight.foreground1": "#ffff00","editorBracketHighlight.foreground2": "#00d9ff","editorBracketHighlight.foreground3": "#c300ff",},"tokenColors": [{"scope": ["constant.character.fwhf"],"settings": {"foreground": "#dd0000"}}]
}

在这里插入图片描述
    编辑器类配置点击这里查阅更多,自定义高亮规则scope对应高亮配置中的name。让我们一起重新运行,并看看结果吧。
在这里插入图片描述
    可以看到上图中的 if 和 abc 变为了红色。虽然可以自定义scope,但是我仍然不建议自定义。一但添加了自定义的scope,如果用户在vscode的主题中没有选择该主题,那么意味着scope无效,也将导致对应的高亮规则匹配到的字段将会变成默认色。

自动补全

    package.json中添加snippets字段,并创建对应json

"snippets": [{"language": "fwhf","path": "./snippets/snippets.json"
}]

在这里插入图片描述
在这里插入图片描述
    自动补全json文件详解

{"abc def": {"prefix": "abc def","body": ["abc().def(${1:name}, \"${2:value}\", ${3:type}, \"${4:desc}\")"],"description": "abc def description"}
}

在这里插入图片描述
    重新运行,并在test.fwhf中输入abc试试吧。
在这里插入图片描述
    回车即可看到直接写入了我们定义好的语句规则。
在这里插入图片描述

打包、本地测试

    安装打包工具

npm install -g vsce

    项目根目录执行打包命令

vsce package

在这里插入图片描述
    打开readme文件删除下图中选中部分
在这里插入图片描述
    重新执行打包命令
在这里插入图片描述
在这里插入图片描述
    可以看到上图中生成了fwhf-demo-0.0.1.vsix文件,执行下方命令本地安装测试。
在这里插入图片描述
    安装成功后是可以在插件栏中显示的
在这里插入图片描述
    在编辑中直接打开刚才的咱们的test.fwhf,当然也可以新建。可以看到 if 和 abc是蓝色,而非自定义的红色。
在这里插入图片描述
    可以在主题中选择自定义主题(文件 、首选项、主题、颜色主题、fwhf-dark-themes)
在这里插入图片描述
    可以看到颜色变成了咱们的自定义红色
在这里插入图片描述
    但是你可以看看你的其他文件,是不是颜色都丢失了呢?那自定义主题还有用吗?当然有用,你可以把上文中的推荐字段(或顶层字段)全部定义。当然如果这样做,用户在未选择该自定义主题时,高亮配置自定义name的顶层又不在推荐字段中时,那将意味着你的规则代码片段将使用默认色。

添加插件图标

    上图插件列表中可以看到咱们的插件没有图标,那如何增加图标呢?
    package.json中添加字段icon,并添加对应图片
在这里插入图片描述
在这里插入图片描述
    重新打包并安装该插件就有图标啦。
在这里插入图片描述

插件名称有undefined

    在vscode的已安装插件目录中发现有一个undefined
在这里插入图片描述
    在package.json中添加字段publisher,并重新打包安装
在这里插入图片描述
在这里插入图片描述
    tips:如果icon和publisher显示有问题,可以尝试先删除已有的该插件再重新安装。

结尾

    文章有些长,但是如果需要该类知识还是建议边阅读边跟着操作,相信会对你有不错的提升。

相关内容

热门资讯

linux入门---制作进度条 了解缓冲区 我们首先来看看下面的操作: 我们首先创建了一个文件并在这个文件里面添加了...
C++ 机房预约系统(六):学... 8、 学生模块 8.1 学生子菜单、登录和注销 实现步骤: 在Student.cpp的...
JAVA多线程知识整理 Java多线程基础 线程的创建和启动 继承Thread类来创建并启动 自定义Thread类的子类&#...
【洛谷 P1090】[NOIP... [NOIP2004 提高组] 合并果子 / [USACO06NOV] Fence Repair G ...
国民技术LPUART介绍 低功耗通用异步接收器(LPUART) 简介 低功耗通用异步收发器...
城乡供水一体化平台-助力乡村振... 城乡供水一体化管理系统建设方案 城乡供水一体化管理系统是运用云计算、大数据等信息化手段࿰...
程序的循环结构和random库...   第三个参数就是步长     引入文件时记得指明字符格式,否则读入不了 ...
中国版ChatGPT在哪些方面... 目录 一、中国巨大的市场需求 二、中国企业加速创新 三、中国的人工智能发展 四、企业愿景的推进 五、...
报名开启 | 共赴一场 Flu... 2023 年 1 月 25 日,Flutter Forward 大会在肯尼亚首都内罗毕...
汇编00-MASM 和 Vis... Qt源码解析 索引 汇编逆向--- MASM 和 Visual Studio入门 前提知识ÿ...
【简陋Web应用3】实现人脸比... 文章目录🍉 前情提要🌷 效果演示🥝 实现过程1. u...
前缀和与对数器与二分法 1. 前缀和 假设有一个数组,我们想大量频繁的去访问L到R这个区间的和,...
windows安装JDK步骤 一、 下载JDK安装包 下载地址:https://www.oracle.com/jav...
分治法实现合并排序(归并排序)... 🎊【数据结构与算法】专题正在持续更新中,各种数据结构的创建原理与运用✨...
在linux上安装配置node... 目录前言1,关于nodejs2,配置环境变量3,总结 前言...
Linux学习之端口、网络协议... 端口:设备与外界通讯交流的出口 网络协议:   网络协议是指计算机通信网...
Linux内核进程管理并发同步... 并发同步并发 是指在某一时间段内能够处理多个任务的能力,而 并行 是指同一时间能够处理...
opencv学习-HOG LO... 目录1. HOG(Histogram of Oriented Gradients,方向梯度直方图)1...
EEG微状态的功能意义 导读大脑的瞬时全局功能状态反映在其电场结构上。聚类分析方法一致地提取了四种头表面脑电场结构ÿ...
【Unity 手写PBR】Bu... 写在前面 前期积累: GAMES101作业7提高-实现微表面模型你需要了解的知识 【技...