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

news2024/11/30 8:40:07

在这里插入图片描述

『精』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

2)、需下插件

要将EditorConfig与这些编辑器一起使用,需要安装一个插件。
image.png


五、参考资料💘

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

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

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

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

相关文章

Linux常用命令——nm命令

在线Linux命令查询工具(http://www.lzltool.com/LinuxCommand) nm 显示二进制目标文件的符号表 补充说明 nm命令被用于显示二进制目标文件的符号表。 语法 nm(选项)(参数)选项 -A:每个符号前显示文件名; -D:显示动态符号; …

成员变量-java循环机构

1.概念所谓的成员变量,是指在类中(不是方法或其他代码块)直接定义的变量。根据是否带有static关键字,成员变量又分为静态变量(类变量)、实例变量(对象变量)。成员变量在整个类的内部都有效,可以在当前类的任何方法中使用。另外如果成员变量不…

NFS介绍及服务器搭建

一、NFS 简介 NFS,英文全称 Network File System,主要功能:通过网络,让不同的机器、不同的操作系统可以共享文件。类似windows的共享文件夹 ​ NFS服务器共享本机目录,客户端机器挂载该目录后,就可以像自…

AI+OCR赋能古彝文数字化—让经典重新跳动

1️⃣ 彝文与古彝文概况文化是一个民族社会历史发展到一定程度的产物,代表着文明发展的程度,而文字是文化的一种载体,文字的出现是社会进入文明阶段的重要标志之一,其生动记录着一个民族的智慧成果,深刻反映着一个民族…

Unity 3D 环境特效||Unity 3D 游戏场景设计实例

Unity 3D 环境特效 一般情况下,要在游戏场景中添加雾特效和水特效较为困难,因为需要开发人员懂得着色器语言且能够熟练地使用它进行编程。 Unity 3D 游戏开发引擎为了能够简单地还原真实世界中的场景,其中内置了雾特效并在标准资源包中添加…

mmLab系列使用方法

mmLab系列使用方法环境搭建mmdetection检查数据集运行部署mmdeploy环境搭建使用mmOCRmmsegmentation环境搭建 Windows最推荐安装方法: 首先需要查好自己gpu的CUDA版本,根据版本到pytorch官方网站查找对应的pytorch版本(!!!只查找不下载!)ht…

Mybatis源码分析(七)MapperMethod的INSERT分析

目录一 INSERT 语句1.1 参数的对应解析convertArgsToSqlCommandParam1.2 ID获取对应的MappedStatement1.3 MappedStatement交给执行器执行1.4 不同的执行器获取不同的StatementHandler1.5 根据参数获取BoundSql1.6 执行器配置参数处理器ParameterHandler1.7 拿到StatementHandl…

人工智能-http协议和静态服务器

目录1、HTTP协议1.1 网址1.2 http协议的介绍1.3 http请求报文1.4 http响应报文1.5查看http协议的通信过程2、静态web服务器程序开发2.1 搭建python自带的静态web服务器2.2 静态web服务器-返回固定页面数据1、HTTP协议 1.1 网址 网站又称为U…

【报错】assert failed: xQueueSemaphoreTake queue.c:1545 (( pxQueue ))

🌱 hi,最近开始写嵌入式,碰到蛮多新的问题,也调bug到凌晨五点过。欢迎关注我,一起讨论交流 开发环境 在VScode中使用Arduino,开发板ESP32S3 报错代码 使用队列接收服务器消息,FIFO依次处理消…

ROS1学习笔记:参数的使用与编程方法(ubuntu20.04)

参考B站古月居ROS入门21讲: 参数的使用与编程方法 基于VMware Ubuntu 20.04 Noetic版本的环境 文章目录一、概念图讲解二、创建功能包三、参数命令行的使用方法:rosparam显示某个参数值:rosparam get设定某个参数值:rosparam set将…

linux小程序—进度条(动态演示)

文章目录1. \n与\r的区别1. linux环境下2. windows环境下2. 缓冲区问题1.\n的情况2.\r的情况3. \n与\r的情况对比4. 使用fflush函数观察\r情况5. 不为\n与\r的情况3.进度条的实现1. printf 打印字符问题1. 修改前2.修改后2 . 注意事项3. 整体实现1. makefile(自动化编译工具&am…

一篇文章教会你Linux下《常用操作指令》

基本指令首言ls(查看目录)pwds(显示用户当前所在目录)cd(改变工作目录)mkdir(创建目录)rmdir(删除目录)touch (新建文件或更新文件时间&#xff0…

【Python】获取视频弹幕并生成词云

目录一、摘要二、获取目标视频cid三、获取视频弹幕xml文件四、处理弹幕文件五、生成词云六、完整参考代码一、摘要 就是那个大家都用的弹幕视频网站,不写名字了,写了老是不能通过。 获取视频的弹幕文件(xml),并生成如图…

认真分享一个让我变厉害的小建议

很多朋友,加我好友之后,第一句话通常是:我想提高英语,有什么资料推荐? 这要看你学英语的目的了。 我们学英语是为了什么? 理由可能很多,我就说个最俗的目的吧,为了发财。 想发财应向谁学习&…

代码随想录第31天|● 455.分发饼干 ● 376. 摆动序列 ● 53. 最大子序和

455.分发饼干 大尺寸的饼干既可以满足胃口大的孩子也可以满足胃口小的孩子,那么就应该优先满足胃口大的。 这里的局部最优就是大饼干喂给胃口大的,充分利用饼干尺寸喂饱一个,全局最优就是喂饱尽可能多的小孩。 可以尝试使用贪心策略&#xf…

[ 数据结构 ] 最小生成树(MST)--------普里姆算法、克鲁斯卡尔算法

0 修路问题 有胜利乡有 7 个村庄(A, B, C, D, E, F, G) ,现在需要修路把 7 个村庄连通各个村庄的距离用边线表示(权) ,比如 A – B 距离 5 公里问:如何修路保证各个村庄都能连通,并且总的修建公路总里程最短? 思路: 将 10 条边&a…

Java常用工具类方法(上)

1. Collections首先出场的是java.util包下的Collections类&#xff0c;该类主要用于操作集合或者返回集合&#xff0c;我个人非常喜欢用它。1.1 排序在工作中经常有对集合排序的需求。看看使用Collections工具是如何实现升序和降序的&#xff1a;List<Integer> list new…

揭秘链动2+1商业模式玩法

链动21模式主要是打造裂变团队的同时又能快速地将平台销售额提升起来&#xff0c;链动模式可以说颠覆传统的分销&#xff0c;算是一个创新更能吸引用户&#xff0c;稳住会员&#xff0c;拓展新客户的商业模式。 链动21模式有两个身份&#xff0c;分别是代理和老板 【代理商】…

Java高手速成 | 高质量代码编写最佳实践

程序员之间交流时&#xff0c;会经常使用非程序员无法理解的行话&#xff0c;或者使用令操不同编程语言的程序员理解起来比较模糊的行话。 但是&#xff0c;那些操相同编程语言的程序员理解起来不会产生什么问题。 这有时也取决于程序员所掌握知识的渊博程度。 一个新手或许不理…

以 Animated Drawings APP 为例,用 TorchServe 进行模型调优

内容导读 上节介绍了 TorchServe 模型部署调优的 5 个步骤&#xff0c;将模型部署到生产环境中。本节以 Animated Drawings APP 为例&#xff0c;实际演示 TorchServe 的模型优化效果。 本文首发自微信公众号&#xff1a;PyTorch 开发者社区 去年&#xff0c;Meta 凭借 Animate…