【精】EditorConfig 小老鼠 跨编辑器 | IDE 保持一致的编码风格

news2024/10/6 1:43:59

封面.psd.png

【精】EditorConfig 小老鼠 跨编辑器 | IDE 保持一致的编码风格

🍅因发布平台差异导致阅读体验不同,将本文原编写地址贴出🌹:《【精】EditorConfig 小老鼠 跨编辑器 | IDE 保持一致的编码风格》

文章目录

  • 【精】EditorConfig 小老鼠 跨编辑器 | IDE 保持一致的编码风格
    • 一、什么是EditorConfig
    • 二、文件识别符
    • 三、风格属性控制
    • 四、不同规则参考
        • 1)、简洁通用
        • 2)、前端Vue项目
        • 3)、前端React项目
        • 4)、前端Angular项目
        • 5)、Python「PEP8规范」
        • 6)、Go「Uber规范」
    • 五、支持的编辑器和IDE
        • 1)、无需插件
        • 2)、需下插件
    • 五、参考资料💘


一、什么是EditorConfig

在编写项目时,或多或少会在根目录下看到这个文件,那么这个文件是干嘛用的呢?
image.png
简单来说,EditorConfig是控制简单通用的代码风格,最大特点就是跨编辑器和 IDE。因为图标是一个卡通老鼠,我将其俗称为小老鼠,就和控制git的 .gitignore 文件一样,在项目的根目录下会将其命名为 .editorconfig 的文本文件,这个协议使用起来非常简单,写法与Windows INI配置文件类似,和Python的ConfigParser文件解析器兼容。
在官网是这么描述的,EditorConfig 有助于跨各种编辑器和 IDE 处理同一项目的多个开发人员保持一致的编码风格。EditorConfig 项目由用于定义编码样式的文件格式和一组文本编辑器插件组成,这些插件使编辑者能够读取文件格式并遵循定义的样式。EditorConfig文件易于阅读,并且它们与版本控制系统很好地配合使用。

  • 跨编辑器、IDE,拥有良好的插件支持,对于团队开发比较方便。
  • 为了保证不同的语言兼容性,只能支持一些简单的风格样式。
  • 先根据识别符识别不同文件,再通过编写规则控制不同文件代码的风格属性。

下面是一个示例文件,为Python和JavaScript设置代码风格样式👇

# 顶级配置, 停止搜索就近配置规则
root = true

[*]
# unix风格的换行符, 使用\n换行符换行
end_of_line = lf
# 确保文件在保存时以换行结尾
insert_final_newline = true

# 用大括号展开符号匹配多个不同文件
[*.{js,py}]
# 设置字符编码
charset = utf-8

[*.py]
# python文件使用四个空格缩进
indent_style = space
indent_size = 4


二、文件识别符

以文件路径与文件名为依据,控制不同的文件应遵循什么样的规则。

** 识别符 **描述
*匹配多个任何字符字符串,路径分隔符(/)除外
**匹配多个任何字符字符串
?任何单个字符,路径分隔符(/)除外
[seq]匹配[]括号中,seq中的任意单个字符
[!seq]匹配[]括号中,任何不在seq中的单个字符
{s1,s2,s3}匹配任何给定的字符串(用逗号分隔,可以嵌套)
{num1..num2}num1和num2之间的任何整数,其中num1和num2可以是正数,也可以是负数

三、风格属性控制

这部分可以说是EditorConfig「小老鼠」最核心所在,虽然拥有的属性不多,但这些都是最通用的风格控制。特别有意思的是在一些编辑器或IDE中,会存在一些特定的扩展属性,在同一编辑器或能识别这些属性的编辑器中通用,如Jetbrains家的IDE存在ij_开头的特定属性,是将IDE自己的代码样式风格设置保存到EditorConfig中。
需要注意的是,根据官方文档的说法,并不是所有的编辑器、IDE支持都支持这些属性,若在使用过程中发现规则失效,不妨去看看Github上的支持对应表 Github 编辑器配置属性。

** 属性名 **描述是否通用
indent_style设置缩进样式,为tabspace分别使用制表符和空格符,值不区分大小写。
indent_size为一个整数,定义每个缩进级别使用的空格数或制表符的宽度。设置为tab且指定tab_width时,将使用tab_width属性值。
tab_width为一个整数,定义用于表示制表符的列数。该值默认为indent_size,通常不需要指定。
end_of_line设置为lfcrcrlf以控制换行符的表示方式,值不区分大小写。
charset设置字符集编码,一般设置为utf-8
trim_trailing_whitespace设置为true时可删除换行符之前的任何空白字符,为false时可确保不删除。
insert_final_newline设置为true文件在保存时文末以换行结尾,为false则不以换行结尾。
root应在文件顶部,任何部分之外指定的特殊属性。设置为true将停止对子文件目录下其他.editorconfig文件搜索,停用就近配置原则。
max_line_length在指定的字符数量后强制强行换行,off关闭此功能。大多数兼容
换行表示方式描述适配系统
LFLine-Feed的缩写,意为换行\\nUnix 或 Unix兼容系统、macOs(\\n
CRCarriage-Returnd的缩写,意为回车\\rApple II家族、Classic Mac OS(\\r
CRLF回车和换行的结合体,全称Carriage-Returnd-Line-Feed,应用于最广泛的Windows操作系统上。DOS 和 Windows系统(\\r\\n

特殊字符可以使用反斜杠进行转义,这样它们就不会被解释为通配符模式,如[\*]


四、不同规则参考

在这里根据不同项目设置对应的EditorConfig规则,需要注意的是参考价值大于实际应用价值,大伙应该根据自身习惯或则团队规范进行配置。
当然,如果这些参考对你来说太简单的,那不妨可以参考一下知名项目是怎么编写这些规则的,这里有一份名单Projects Using EditorConfig以供你去查阅。

对于需要编写注释内容,使用#号语法进行标记。

1)、简洁通用

不同的项目之间其实有很多属性规则都是通用的,简简单单未尝不是一件好事,在下面的规则中可能只需要改个缩进长度就可以使用。

# 该文件用于统一不同编辑器和IDE的编码风格
# https://editorconfig.org/
root = true

[*]
charset = utf-8
end_of_line = lf
indent_size = 2
indent_style = space
insert_final_newline = true
trim_trailing_whitespace = true

[*.md]
max_line_length = off
trim_trailing_whitespace = false

2)、前端Vue项目

# 该文件用于统一不同编辑器和IDE的编码风格
# https://editorconfig.org/
root = true

[*]
charset = utf-8
end_of_line = lf
indent_size = 4
indent_style = space
insert_final_newline = true
max_line_length = 120
trim_trailing_whitespace = true

[*.{less,scss}]
indent_size = 2

[*.vue]
indent_size = 2

[*.{cjs,mjs,js,jsx,ts,tsx}]
indent_size = 2
max_line_length = 80
tab_width = 2

# 在Markdown文档中,换行符前删除空格以确保语法准确
[*.{md,markdown}]
max_line_length = off
trim_trailing_whitespace = false

[{*.har,*.jsb2,*.jsb3,*.json,.babelrc,.eslintrc,.prettierrc,.stylelintrc,bowerrc,jest.config}]
indent_size = 2

3)、前端React项目

# 该文件用于统一不同编辑器和IDE的编码风格
# https://editorconfig.org/
root = true

[*]
charset = utf-8
end_of_line = lf
indent_size = 4
indent_style = space
insert_final_newline = true
max_line_length = 120
trim_trailing_whitespace = true

[*.{less,scss}]
indent_size = 2

[*.{cjs,mjs,js,jsx,ts,tsx}]
indent_size = 2
max_line_length = 80
tab_width = 2

# 在Markdown文档中,换行符前删除空格以确保语法准确
[*.{md,markdown}]
max_line_length = off
trim_trailing_whitespace = false

[{*.har,*.jsb2,*.jsb3,*.json,.babelrc,.eslintrc,.prettierrc,.stylelintrc,bowerrc,jest.config}]
indent_size = 2

4)、前端Angular项目

# 该文件用于统一不同编辑器和IDE的编码风格
# https://editorconfig.org/
root = true

[*]
charset = utf-8
end_of_line = lf
indent_style = space
insert_final_newline = true
trim_trailing_whitespace = true

[*.{less,scss}]
indent_size = 2

[*.{cjs,mjs,js,ts}]
indent_size = 2
max_line_length = 80
tab_width = 2

# 在Markdown文档中,换行符前删除空格以确保语法准确
[*.{md,markdown}]
max_line_length = off
trim_trailing_whitespace = false

[{*.har,*.jsb2,*.jsb3,*.json,.babelrc,.eslintrc,.prettierrc}]
indent_size = 2

5)、Python「PEP8规范」

# 该文件用于统一不同编辑器和IDE的编码风格
# https://editorconfig.org/
root = true

[*]
charset = utf-8
end_of_line = lf
indent_size = 4
indent_style = space
insert_final_newline = true
trim_trailing_whitespace = true

[*.py]
indent_size = 4
max_line_length = 80

[*.csv]
max_line_length = 2147483647

[*.bat]
indent_style = tab

[docs/**.txt]
max_line_length = 79

[{*.bash,*.sh,*.zsh}]
indent_size = 2

# 在Markdown文档中,换行符前删除空格以确保语法准确
[*.{md,markdown}]
max_line_length = off
trim_trailing_whitespace = false

[*.{json,ini,yml}]
indent_size = 2
insert_final_newline = false

6)、Go「Uber规范」

# 该文件用于统一不同编辑器和IDE的编码风格
# https://editorconfig.org/
root = true

[*]
charset = utf-8
end_of_line = lf
indent_size = 4
indent_style = space
insert_final_newline = true
trim_trailing_whitespace = true

[*.go]
indent_style = tab
max_line_length = 99

# 在Markdown文档中,换行符前删除空格以确保语法准确
[*.{md,markdown}]
max_line_length = off
trim_trailing_whitespace = false

[*.{json,ini,yml}]
indent_size = 2
insert_final_newline = false


五、支持的编辑器和IDE

大部分编辑器与IDE集成环境都支持EditorConfig「小老鼠」,可根据习惯自行选择。

1)、无需插件

这些编辑器与EditorConfig支持捆绑在一起🙌
![image.png](https://img-blog.csdnimg.cn/img_convert/e63eb1403933fa1c897aadff276e0751.png#averageHue=#f5f3f1&clientId=ud287d539-d327-4&crop=0&crop=0&crop=1&crop=1&from=paste&height=871&id=u2052a03a&margin=[object Object]&name=image.png&originHeight=871&originWidth=548&originalType=binary&ratio=1&rotation=0&showTitle=false&size=189213&status=done&style=shadow&taskId=u8131271e-1784-4ec4-abff-9e250e53495&title=&width=548)

2)、需下插件

要将EditorConfig与这些编辑器一起使用,需要安装一个插件。
![image.png](https://img-blog.csdnimg.cn/img_convert/fdbc06db83fc1cce6aea9d94cc4cf0b7.png#averageHue=#f6f4f1&clientId=ud287d539-d327-4&crop=0&crop=0&crop=1&crop=1&from=paste&height=733&id=u3aa185cd&margin=[object Object]&name=image.png&originHeight=788&originWidth=589&originalType=binary&ratio=1&rotation=0&showTitle=false&size=172688&status=done&style=shadow&taskId=u43f0bba7-2cef-4daa-9612-dd5f1aed9e4&title=&width=548)


五、参考资料💘

  • 维基百科中文版:
    • INI文件
    • 换行
  • 官方手册:
    • Editorconfig 官网
    • Editorconfig 文档
  • 网络文献:
    • Uber Golang 编程规范

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

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

相关文章

实时数仓方案

2、实时数仓方案 2.1、为何需要实时数仓架构 随着数据量的增大,传统数据的方案在时效性上和数据维护上变得越来越困难。实时数仓架构应运而生。 具体方案落地上实时数仓有很多方案可以选择,不同的业务和应用场景到底应该选择哪种技术方案?…

React18新特性

React 团队在 2022 年 3 月 29 日正式发布了 React 的第 18 个版本。 在这篇文章里简单介绍 React 18 的新特性,React Concurrent Mode(并发模式)的实现,以及简要的升级指南。 New Features Automatic Batching 早在 React 18 之…

011-Ensp-实验-配置ACL

实验要求 1.通过ACL 使PC1无法访问PC3 实验结构 实验步骤 基础环境配置: PC间互通 1. PC1 2 3 配置IP网关 2. LSW2 创建三个vlan ,g0/0/2 g0/0/3 g/0/04 类型配置为Access 分别加入三个vlan g0/0/1 配置为trunk 并允许所有vlan通过 3. LSW1 g0/0/1 配置trunk …

vector底层实现及深层次拷贝问题

目录 大框架 接口实现 深层次拷贝问题(两次深拷贝) 大框架 为了与库里实现的更接近一些,先来看一下STL中是如何实现vector的(这里不是PJ版,PJ版稍微晦涩一点不容易理解,这里采用Linux下g的版本&#xf…

VectorNet: Encoding HD Maps and Agent Dynamics from Vectorized Representation

Paper name VectorNet: Encoding HD Maps and Agent Dynamics from Vectorized Representation Paper Reading Note URL: https://arxiv.org/pdf/2005.04259.pdf TL;DR waymo 出品的 CVPR2020 论文 ,关注在自动驾驶场景(复杂多智能体系统&#xff0…

【算法自由之路】快慢指针在链表中的妙用(下篇)

【算法自由之路】快慢指针在链表中的妙用(下篇) 继上篇之后,链表这块还有两个相对较难的问题我们继续举例。 问题 1 给定具有 random 指针的 next 方向无环单链表,复制该链表 单听这个问题可能有点懵,这个链表结构我…

PCB封装创建(CHIP类)

PCB封装要有以下内容 PCB焊盘管脚序号丝印阻焊1脚标识目录 CHIP类(电阻 电容 电感 三极管) 0805C 0805R 0805L SOT-23 1.CHIP类(电阻 电容 电感 三极管) 1.新建一个PCB元件库 打开PCB Library 以下以0805为例。 创建080…

“CAcModuleResourceOverride”: 未声明的标识符

本文迁移自本人网易博客,写于2011年10月8日首先是运行时提示:试图执行系统不支持的操作。添加CAcModuleResourceOverride resourceOverride; 后,编译出现如下错误:error C2065: “CAcModuleResourceOverride”: 未声明的标识符 添…

scikit-learn 普通最小二乘法

scikit-learn 普通最小二乘法什么是普通最小二乘法?参考文献什么是普通最小二乘法? 线性回归模型的数学表达式如下: y^(w,x)w0w1x1…wpx1\hat{y}(w, x)w_{0}w_{1} x_{1}\ldotsw_{p} x_{1}y^​(w,x)w0​w1​x1​…wp​x1​ 其中 w0,w1,...,w…

Java--集合

1、集合框架 集合框架被设计成要满足以下几个目标。 该框架必须是高性能的。基本集合(动态数组,链表,树,哈希表)的实现也必须是高效的。 该框架允许不同类型的集合,以类似的方式工作,具有高度的…

【自用】高频电子线路复习(更新中)

疫情原因 没有考试就放假回家了 返校后将先进行死亡考试周 七天考完九门 回校再进行极限复习只能说可以通过 而不利于绩点的提升 所以要从现在开始抽取一些时间进行学习 第七章 频率变换方法与电路分析 7.1 非线性电路包括 发送端的高频振荡器、倍频器、谐振功率放大器和调…

【ROS自定义文件】自定义头文件及源文件的调用

本文记录ROS中的自定义文件的调用,主要包括自定义头文件和源文件的使用。 1 自定义C头文件的调用 注意这个文件目录的结构,尤其是 hello.h 这个自定义的头文件在 include/plumbing_head 文件夹之下,这个会直接影响后续头文件的引用。 hello.…

尚医通-整合网关-Nuxt搭建前端环境(二十六)

目录: (1)整合服务网关 (2)前台用户系统-nuxt搭建前端环境 (3)前台用户系统-目录结构和封装axios (1)整合服务网关 前面的过程使用nginx请求转发 下面使用SpringClo…

ScheduledThreadPoolExecutor定时任务执行线程池分析

概述 ScheduledThreadPoolExecutor自然是继承了ThreadPoolExecutor,那么它也就是一个被定义了特定功能的线程池而已,本质上就是一个ThreadPoolExecutor。 代码分析 可以看到其继承了ThreadPoolExecutor,在new ScheduledThreadPoolExecutor…

【FPGA】Verilog 编码实现:与非门 | 或非门 | 异或门 | NAND/NOR/XOR 行为验证

写在前面:本章主要内容为了解和确认 NAND/NOR/XOR 门的行为,并使用Verilog实现,生成输入信号后通过模拟,验证每个门的操作,并使用 FPGA 来验证 Verilog 实现的电路的行为。 本章目录: Ⅰ. 前置知识 0x00…

C++ 排序大合集

目录 一、了解排序 1、内部 2、外部 二、排序的稳定性 三、插入排序 1、算法和操作 2、代码 四、选择排序 1、算法和操作 2、代码 五、冒泡排序 1、算法和操作 2、代码 六、堆排序 1、优先队列 2、排序代码 七、归并排序 1、定义 2、基本算法 (1)、分离 …

宝塔Linux面板安装MySQL数据库,并且开启远程链接

1.宝塔面板【软件商店】->【应用搜索】,搜索MySQL,然后点击安装想要的版本,我这边是安装的5.6版 2. 安装完后重置数据库管理员密码 3.Navicat Premium 15连接数据库 4.外网navicat工具无法连接数据库的处理办法 4.1输入 mysql -u root -p 后回车&a…

零基础入门反序列化漏洞

目录 前提知识 漏洞产生原理 常见的函数 序列化 反序列化 __sleep函数 私有和保护 __wakeup函数 反序列化漏洞举例 构造XSS漏洞 反序列化免杀后门 POP CHAIN(POP链) 前提知识 漏洞产生原理 serialize() 和 unserialize() 在 PHP内部实现上是没有漏洞的&#xf…

Cadence PCB仿真使用Allegro PCB SI配置电路板层叠结构的方法图文教程

⏪《上一篇》   🏡《总目录》   ⏩《下一篇》 目录 1,概述2,配置方法3,总结1,概述 本文详细介绍使用Allegro PCB SI软件配置电路板层叠结构的方法。 2,配置方法 第1步:打开待仿真的PCB文件,并确认软件为Allegro PCB SI 如果,打开软件不是Allegro PCB SI则可这样…

解决No module named tkinter

原因 今天准备使用tutle画个图,导入turtle后运行发现提示没有tkinter这个包,于是尝试pip install tkinter安装,结果当然是失败: 后面一番搜索之后发现tinter是python3自带的包,不能用pip安装,我这里安装的…