VS code 插件之中英文间自动添加空格

news2024/9/20 10:42:06

前言

不知道大家在开发过程中是不是会遇到写代码注释或者文本内容时中英文之间没有空格的情况,很多时候在写代码尤其是写注释的时候容易忘记加空格,但回过头来看又难以忍受,于是我就想着自己写一个 vscode 插件来解决这个问题,希望能帮到大家。

使用

我自己写了一个 vscode-auto-space 插件,安装即用,快速简单,效果图如下图,给有需要的人使用。

image.png

配置的话目前支持两个配置,一个是自动打开的配置,另一个是格式化文本类型的配置。

什么时候生效?

当你保存文件的时候会默认帮助你格式化文本内容。

相关配置如下图

image.png

原理

给一些想要修改或者想要学习写插件的朋友简单讲解一下原理

首先写插件的格式就不多说了,新手的话可以看看这个文档,个人感觉入门了解个大概内容是没问题的,至于更加全面的文档那还是得要去看官方文档,虽然英文文档看起来很吃力,但是还是推荐大家慢慢尝试着去看,可能刚开始读起来很吃力要配合几个翻译软件一起,但是当你阅读的多了慢慢也就流畅了。

项目起步的话直接用的是 antfu 大佬的 starter-vscode 模板,一键启动省去配置的时间。

重点要说的就是实现了,这个项目目的是要修改用户当前的文件,那么我就要通过监听到文件的保存来执行对应的修改逻辑,这里我使用的是onWillSaveTextDocument这个 API,它会在文件保存前执行,所以非常适合做保存文件前的逻辑操作。

image.png

当然这里会对用户的 config 进行判断,如果开启才执行对应的 command,于是这里又需要再监听用户的 config 修改事件,当 enable字段修改执行对应的注销和执行操作。

image.png

讲完了执行的时机,那么我们重点讲讲怎么自动加上空格的,我们需要在注册command的时候区分两种情况:一种是全文档类型另一种则只是 comment

  1. 全文档类型的处理非常简单,直接拿到当前的 text 文档,然后对每一行进行分析,并使用正则匹配到中英文后给其添加空格,然后调用editor.edit API 直接进行 text 替换即可。

image.png

  1. comment类型的处理则稍微难一点,这里我们展开讲解下。

    • 使用各种语言的注释的正则匹配进行文本匹配,把注释先提取出来,

      // javascript java c++ c# php swift
      const commentRegex = ///.*|/*[\s\S]*?*//gm // 单行和多行
      // python
      const pythonRegex = /("""|''')([\s\S]*?)("""|''')|(#.*$)/gm
      // ruby
      const rubyRegex = /#\s*(.*)$/gm
      
    • 拿到 text 文档的所有comment的内容,然后一一进行处理,处理逻辑统一使用addSpaceChineseAndEnglish函数

    • 处理后进行文本更新,这里更新的话,需要依次更新,这里有个坑就是计算位置就需要每次通过document.getText()拿到最新的 text 文档内容进行位置计算然后拿到range信息进行更新即可

image.png

总结

以上就是我关于这个写这个插件的所有内容。

最后,如果本篇文章对大家有帮助的话,希望大家能够点个赞点个关注,鼓励下作者,感谢。

当然有问题也欢迎讨论,一起共同成长进步。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/453969.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

跟我一起开启 linux 的学习吧

跟我学 CentOS 的安装 一、安装 VMware二、创建虚拟机三、安装 CentOS 7四、linux 的登录 一、安装 VMware VMware 计算机虚拟化软件 从官网 https://www.vmware.com/cn.html 下载并安装 这里就不再展示安装过程啦! 有需要的可以 点击这里 →→→ VMware 下载安装过…

postgresql 源码结构分析

专栏内容:postgresql内核源码分析个人主页:我的主页座右铭:天行健,君子以自强不息;地势坤,君子以厚德载物. 目录 前言 源码下载 源码结构 核心代码目录 结尾 前言 本文对postgresql源码目…

进销存管理系统和ERP的工作原理和实现方式有何不同?

一、ERP是什么? ERP即企业资源规划(Enterprise Resource Planning),是一种集成管理软件系统。它的目的是整合和规划各种企业资源和业务流程,包括财务、物流、采购、生产、销售等,以提高企业的管理效率和业…

Java -- IO流

IO流 主要用于读写数据 IO流按照流的方向可以分为以下两种: 输入流输出流 IO流按照操作文件类型可以分为以下两种: 字节流字符流 字节流可以操作所有类型的文件,而字符流只可以操作纯文本文件 #mermaid-svg-tfFZjSluOmEFUpyc {font-fam…

SVM-老师讲的真的很好!

支持向量机(Support Vector Machine) 如同逻辑回归一样,SVM是一个分类模型 目标 SVM解决分类模型的基本思路:什么是一个好的分类边界? SVM认为,好的分类决策边界应当是:类别边界的距离应当尽可能的远 目标函数 拉格朗日乘子法 那么我们的公式就可以写为

SIP协议之通话转接

一、介绍 在SIP协议应用中,有一个常用的功能叫通话转接,用于将接通后的通话转给第三方接听处理。 二、原理及流程 转接是通过SIP协议的一个扩展请求方法REFER实现的。呼叫转接由RFC5589(Session Initiation Protocol (SIP) Call Control - Transfer)定义…

(数字图像处理MATLAB+Python)第六章图像平滑-第一节:图像平滑概述和空间域平滑滤波

文章目录 一:图像中的噪声(1)图像噪声分类(2)图像噪声的数学模型(3)程序 二:空间域平滑滤波(1)均值滤波A:均值滤波原理B:示例C&#x…

203、【栈与队列】leetcode ——剑指 Offer II 040. 矩阵中最大的矩形 / 85. 最大矩形:暴力+单调栈(C++/Pyhont版本)

题目描述 Problem: 剑指 Offer II 040. 矩阵中最大的矩形 文章目录 题目描述解法一:暴力解法思路解题方法复杂度Code 解法二:单调栈解法 解法一:暴力解法 思路 首先, 按行获取到达某一元素位置时,之前与当前连续1的个…

【JUC高并发编程】—— 初见JUC

一、JUC 概述 什么是JUC JUC 是 Java并发编程的缩写,指的是 Java.util.concurrent 即Java工具集下的并发编程库 【说白了就是处理线程的工具包】 JUC提供了一套并发编程工具,这些工具是Java 5以后引入的,使得Java开发者可以更加方便地编写…

86页2023年新型智慧城市顶层设计规划解决方案(ppt可编辑)

本资料来源公开网络,仅供个人学习,请勿商用,如有侵权请联系删除 整体架构 智慧城市建设从顶层设计入手,结合软硬件资源整合能力,为公众提供全生命周期一站式服务管理。智慧城市的整体框架分为发展战略层、技术实施层…

HuggingFace入门教程--环境搭建

HuggingFace中文直译为”拥抱脸“,是最近非常火爆的一个人工智能社区,官网地址是:https://huggingface.co/ .关于HuggingFace的相关介绍大家可以自行百度。本文主要为刚入人工智能坑的小白指下路,同时也是逼着自己记录下学习过程中…

Cuckoo Filter

其他判重数据结构 Bloom Filter 无法支持删除和计数的功能,需要更多的存储空间来存储数据 因为在CS中,删除和计数是常见的操作,但是这会对布隆过滤器的存储空间产生影响,同样为了实现这一操作,需要更多的存储空间 数…

vue---父子、兄弟、跨层级关系组件通信

目录 1、props / $emit (父子通信) 2、$root、 $parent / $children(vue3废弃) 3、ref/$refs 4、EventBus ($emit / $on) 5、provideinject(依赖注入) 6、$attrs $listeners(透传&#x…

电子政务网络智慧运维方案

随着电子政务建设的深入,我国政府的信息化建设已经具备了一定的规模,形成了部、省、市、县四级体系;大型政务服务事项、公文流转、行政审批、费税征缴、信息公开、网格化社会管理、三网融合、智慧城市建设等大量政府核心业务越来越依赖信息化…

Linux 静态库的制作与使用

目录 静态库1、 什么是库2、 静态库的制作2.1 命名规则与制作规则 3、 静态库的使用 静态库 1、 什么是库 库文件是计算机上的一类文件,可以简单的把库文件看成一种代码仓库,它提供使用者可以直接拿来用的变量、函数或类。库是一种特殊的程序&#xff…

atbetaflight——指定commit号编译固件

一、说明 在开发过程中,比如成员A上传了一次code,而成员B需要测试本次提交的code,但是由于没有搭建ci,成员B就需要自己拉code编译,本文将详细说明编译步骤; 二、步骤 1、使用vscode打开code 在使用git clone下载到code后的文件…

HDCTF2023复盘

文章目录 前言 CryptoNormal_rsaNormal_rsa(Revenge)(低指数e攻击)Math_RSA(二次剩余)爬过小山的看云(hill,云影) MischardMisc(base64)MasterMisc(crc,wav)ExtremeMisc(zip爆破,明文攻击) Reverseeasy_re(Upx,base64)easyasm(xor) WebWelcome To HDCTF 2023(JSFuck)SearchMast…

『C++』异常详解

「前言」文章是关于C异常方面,下面开始讲解 「归属专栏」C嘎嘎 「笔者」枫叶先生(fy) 「座右铭」前行路上修真我 「枫叶先生有点文青病」 「每篇一句」 少年的肩膀,就该这样才对嘛, 什么都不要急, 先挑起清风明月、杨柳依依和草长…

华为OD机试真题(Java),吃到最多的刚好合适的菜(100%通过+复盘思路)

一、题目描述 入职后,导师会请你吃饭,你选择了火锅。 火锅里会在不同时间下很多菜。 不同食材要煮不同的时间,才能变得刚好合适。你希望吃到最多的刚好合适的菜,但你的手速不够快,用m代表手速,每次下手捞…

作业3综合练习

综合练习: 要求:请给openlab搭建web网站 网站需求: 1.基于域名www.openlab.com可以访问网站内容为 welcome to openlab!!! 2.给该公司创建三个子界面分别显示学生信息,教学资料和缴费网站,基于www.openlab.com/student #更改配置文件 (虚拟主机标签…