前言
EditorConfig
是一套用於統一代碼工具的解決方案,很多項目都有用到,比如Bootstrap
、jQuery
、Underscore
和Ruby
等等。官方網站說的很簡明,爲了方便大家快速上手,我做了簡單的翻譯。
EditorConfig是什麼?
EditorConfig
可以幫助開發者在不同的編輯器和IDE之間定義和維護一致的代碼風格。EditorConfig
包含一個用於定義代碼格式的文件和一批編輯器插件,這些插件可以讓編輯器讀取配置文件並依此格式化代碼。EditorConfig
的配置文件十分易讀,並且可以很好的在VCS(Version Control System
)下工作。
EditorConfig的配置文件是怎樣的?
以下是一個用於設置Python
和JavaScript
行尾和縮進風格的配置文件。
# 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)
[*.js]
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
的示例項目
在哪裏存放配置文件
當打開一個文件時,EditorConfig
插件會在打開文件的目錄和其每一級父目錄查找.editorconfig
文件,直到有一個配置文件root=true
。
EditorConfig
配置文件從上往下讀取,並且路徑最近的文件最後被讀取。匹配的配置屬性按照屬性應用在代碼上,所以最接近代碼文件的屬性優先級最高。
Windows 用戶:在資源管理器創建.editorconfig
文件,可以先創建.editorconfig.
文件,系統會自動重名爲.editorconfig
。
文件格式詳情
EditorConfig
文件使用INI格式(譯註:請參考維基百科),目的是可以與Python ConfigParser Library兼容,但是允許在分段名(譯註:原文是section names)中使用“and”。分段名是全局的文件路徑,格式類似於gitignore。斜槓(/
)作爲路徑分隔符,#
或者;
作爲註釋。註釋應該單獨佔一行。EditorConfig
文件使用UTF-8
格式、CRLF
或LF
作爲換行符。
通配符
通配符 | 說明 |
---|---|
* | 匹配除/ 之外的任意字符串 |
** | 匹配任意字符串 |
? | 匹配任意單個字符 |
[name] | 匹配name字符 |
[!name] | 匹配非name字符 |
{s1,s3,s3} | 匹配任意給定的字符串(0.11.0起支持) |
特殊字符可以用\
轉義,以使其不被認爲是通配符。
支持的屬性
注意:不是每種插件都支持所有的屬性,具體可見Wiki。
indent_style
:tab
爲hard-tabs,space
爲soft-tabs。indent_size
:設置整數表示規定每級縮進的列數和soft-tabs的寬度(譯註:空格數)。如果設定爲tab
,則會使用tab_width
的值(如果已指定)。tab_width
:設置整數用於指定替代tab的列數。默認值就是indent_size
的值,一般無需指定。end_of_line
:定義換行符,支持lf
、cr
和crlf
。charset
:編碼格式,支持latin1
、utf-8
、utf-8-bom
、utf-16be
和utf-16le
,不建議使用uft-8-bom
。trim_trailing_whitespace
:設爲true
表示會除去換行行首的任意空白字符,false
反之。insert_final_newline
:設爲true
表明使文件以一個空白行結尾,false
反之。root
:表明是最頂層的配置文件,發現設爲true
時,纔會停止查找.editorconfig
文件。
目前所有的屬性名和屬性值都是大小寫不敏感的。編譯時都會將其轉爲小寫。通常,如果沒有明確指定某個屬性,則會使用編輯器的配置,而EditorConfig
不會處理。
推薦不要指定某些EditorConfig
屬性。比如,tab_width
不需要特別指定,除非它與indent_size
不同。同樣的,當indent_style
設爲tab
時,不需要配置indent_size
,這樣才方便閱讀者使用他們習慣的縮進格式。另外,如果某些屬性並沒有規範化(比如end_of_line
),就最好不要設置它。
下載插件
Sublime Text
直接在Package Control
裏搜EditorConfig
就行,在Console
裏可以看到生效的配置。
WebStorm
在Setting–>Plugins–>Browse JetBrains Plugins裏搜索EditorConfig
即可。
IntellijIDEA
、PhpStorm
、PyCharm
等應該類似。
注:從9.X版本開始,WebStorm
原生就內置了EditorConfig
,不需要裝任何插件。
譯註:支持的編輯器/IDE很多,使用也都很簡單,大家自己去官網下吧。
做點貢獻
Feedback
聯繫方式:
編寫插件
可以用任何一種核心庫來編寫EditorConfig
插件。核心庫以正在編輯的文件作爲輸入,尋找/編譯相關的.editorconfig
文件,並回傳需要用到的屬性。考慮到未來的兼容性(可以添加新的屬性名和屬性值),請在你的插件裏忽略未識別的屬性名和屬性值。目前有供C、Python和Java語言使用的庫。(還有一個Java和Python綁定的庫,這個只是用來存檔的,目前已廢棄。)
如果你計劃編寫一個新插件,請用郵件羣組通知我們,這樣我們可以幫忙併添加鏈接。如果你計劃用任意一個核心作爲庫或者命令行接口,C、Python或者Java庫的文檔可能會幫上忙。
更多信息請看WIKI。
後言
可以看到,EditorConfig
目前支持的屬性非常少,且只侷限於基本的文件縮進、換行等格式(當然這與其定位有關),雖然並不能滿足團隊裏代碼規範統一的要求,但是其簡單易上手、跨編輯器且靜默生效的特點,建議在項目中使用。