EditorConfig使用介绍——解决markdown文件行尾空格自动删除的问题

7

前言

使用VSCode作为IDE开发工具已经有一段时间,期间一直有一个很困扰我的问题,就是关于行尾空格的自动删除。
一般情况下,都需要对源码中的行尾的多余空格进行删除,所以我有设置自动删除行尾空格。但是当我编辑markdown文件时,行尾空格也会被删除。
WTF!!
markdown文件不是通过行尾三个空格来实现换行的吗,为什么编辑器要自动去除它空格。网上查了很久也没找到能解决这个问题的方法。
直到最近,看到一个叫.editorconfig文件,一下子就想到了可以使用这个来解决。下面就介绍下.editorconfig

EditorConfig是什么

顾名思义,EditorConfig就是编辑器配置,就是指统一不同编辑器的代码风格的配置。举个例子:比如我们要控制一个多人维护的项目缩进统一用2个空格。那么每个人的IDE都是不同的,一种方法是几个人约定好各自配置自己的IDE,但是如果每个人又维护着多个项目,几个项目间就会相互影响。所以更好的办法是由项目本身来控制代码风格。也就是使用EditorConfig来控制。

EditorConfig包含一个用于定义代码格式的文件和一批编辑器插件,这些插件是让编辑器读取配置文件并以此来格式化代码。
EditorConfig的官网: http://editorconfig.org/

EditorConfig的配置和使用

先来看下EditorConfig长什么样子:

# 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

上面的代码就是EditorConfig的配置demo。
当用IDE打开一个文件时,EditorConfig插件会在打开文件的目录和其每一级父节点查找.editorconfig文件,直到找到一个配置了root = true的配置文件。

文件格式详情

EditorConfig文件使用INI格式。斜杠(/)作为路径分隔符,#或者;作为注释。路径支持通配符:

通配符 说明
* 匹配除/之外的任意字符
** 匹配任意字符串
? 匹配任意单个字符
[name] 匹配name字符
[!name] 不匹配name字符
[s1,s2,s3] 匹配给定的字符串
[num1..num2] 匹配num1到mun2直接的整数

EditorConfig支持以下属性:

属性 说明
indent_style 缩进使用tab或者space
indent_size 缩进为space时,缩进的字符数
tab_width 缩进为tab时,缩进的宽度
end_of_line 换行符的类型。lf, cr, crlf三种
charset 文件的charset。有以下几种类型:latin1, utf-8, utf-8-bom, utf-16be, utf-16le
trim_trailing_whitespace 是否将行尾空格自动删除
insert_final_newline 是否使文件以一个空白行结尾
root 表明是最顶层的配置文件,发现设为true时,才会停止查找.editorconfig文件

总结

最后,回到上面遇到的问题,怎么解决呢?
在项目根目录添加文件.editorconfig,内容如下:

# http://editorconfig.org
root = true

[*]
trim_trailing_whitespace = true

[*.md]
trim_trailing_whitespace = false

这样就解决了我的问题。当然,每个项目都要添加。。。。。。


如果觉得我的文章对你有用,请随意赞赏

你可能感兴趣的

载入中...