editorconfig 的介绍
原文链接 https://annatarhe.github.io/2017/09/01/editorconfig-introduction.html
注:以下为加速网络访问所做的原文缓存,经过重新格式化,可能存在格式方面的问题,或偶有遗漏信息,请以原文为准。
太多的不同
总所周知,世界上有着太多太多的编辑器。每个编辑器又各不相同,它们具体表现在各式各样的配置文件上,vim 用 vimscript 写配置文件。emacs 用 commonLisp 写配置。sublime text 和 vs code 都是用 json 配置,然而两个配置文件又不能通用。
操作系统大体看来虽然只有三种,但是里面的细节仍旧有很多的不一样。Unix 系列用 /
作为路径分割,而 Windows 用 \
作为分隔; Linux 用 LF 作为结尾符,Mac 则用 CR, 然后竟然还有 Windows 用的 CR/LF
那么字符集呢?光中文就有 gbk, gb2312 之类的,还有各种各样的其他字符集,算起来有一百多种。
还有 BOM。可能有很多人不知道是什么。然而它丝毫不影响我们写出 bug。我之前听朋友说,他们公司有个非常关键的服务用 python 写的。有一天出了 bug。然而程序员彻夜排查怎么都找不出原因,最后发现有个文件多了一个 BOM 头出错了。没错,它是不可见的。
那么再上层一些。虽然我不理解这个世界怎么会有程序员受得了 Tab 缩进,然而它确实真实存在,有相当多的项目用 Tab 缩进,然后又有很多人用 Space 缩进。这还没完,用 Space 缩进的又分为 2 个 Space 和 4 个 Space 缩进的派别,然后还有很多玩极限的奇葩用 8 个 Space 做缩进。
到这里还没完。你的项目可能有不同的文件类型。比如 makefile 做编译,python 干些小脚本,json 文件写个配置,代码掺杂一些 ruby 和 java(得是什么神经病才会把这两个语言放到一块去)。然后你的代码就很棒棒了。一会儿是 tab 缩进,一会儿又是 4 个空格缩进。然后变成两个空格。。。
需要相同的配置
任何一个略微有一点点想法的程序员都受不了混乱的代码风格。我之前见到过老代码,可能好几年了,一个不到两百行的文件里存在着三个不同风格的缩进,我看了两秒钟立刻关掉了,怕晚上做噩梦。我也是不知道当年这代码是怎么过 review 的。
现在好在有 eslint 这样类似的工具帮我们在事后做些提示的工作。可是大部分情况下它只检查缩进。更多的东西检测不到。
那么针对一个项目修改全局配置文件么?
对我来说我宁愿辞职。 我写的全球无敌最实用,最好看,最牛逼,最快速的 vimrc 岂能因为一个项目就改掉?我这几年辛辛苦苦写下的配置就因为一个项目付诸东流?
同样,你肯定也不愿意把自己辛辛苦苦写出的配置改掉,更不愿意亲手把 Space 风格改成 Tab 风格。我知道这种感觉很像在奶茶店吃屎。
而且比如换行字符这种东西在有些配置项中很难找。很多人都不知道在哪里。
你的项目需要一个英雄
没错,你真的超级超级需要这么一个英雄:.editorconfig。
大概是银河系最简单的配置:
{% highlight yml %}
EditorConfig is awesome: http://EditorConfig.org
top-most EditorConfig file
root = true
Unix-style newlines with a newline ending every file
[*] end_of_line = lf insert_final_newline = true
Matches multiple files with brace expansion notation
Set default charset
[*.{js,py}] charset = utf-8
4 space indentation
[*.py] indent_style = space indent_size = 4
Tab indentation (no size specified)
[Makefile] indent_style = tab
Indentation override for all JS under lib directory
[lib/**.js] indent_style = space indent_size = 2
Matches the exact files either package.json or .travis.yml
[{package.json,.travis.yml}] indent_style = space indent_size = 2 {% endhighlight %}
然后下载一些插件。jetBrains 家 IDE 全线支持。其他编辑器基本上需要安装一下插件。之后你就丝毫不用担心什么字符集不同,什么 BOM 头,什么乱七八糟的换行符。还有恶心的缩进。
而且!一行编辑器配置都不用修改!
而且!其他人只要安装一下插件就可以用里面规定的配置写代码!
妈妈再也不用担心被 review 代码的时候被打屁股了!
老板再也不用担心下面熊孩子胡乱写代码了!
讲真的,这真是个好东西。现在往项目里加个配置文件,一点儿都不晚。