Author:宇宙第一帥
Date: 2017-12-20
什麼是EditorConfig
EditorConfig 幫助開發人員定義和維護跨編輯器(或IDE)的統一的程式碼風格.
EditorConfig專案由一個定義編碼風格的檔案和許多文字編輯器外掛(使得編輯器能夠識別配置檔案並在編碼的時候應用配置的規範)組成;
EditorConfig配置檔案是易讀的,並且和版本控制工具相容;
一個EditorConfig配置檔案看起來是什麼樣子的
示例檔案
下面是一個示例的 .editorConfig配置檔案,該檔案配置了 python和js的末行和縮排的規則
# 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
複製程式碼
檢視wiki,獲取 真實專案使用EditorConfig的示例
配置檔案放置位置
當你開啟一個文件即將coding的時候,EditorConfig外掛就查詢當前被編輯檔案所在的目錄有麼有一個名為 .editorconfig 的檔案,
如果沒有,則開始依次逐級向上查詢當前目錄的父目錄,直到到達工程根目錄,或者找到配置了root=true
的配置檔案。
如果一個工程中出現多個配置檔案,EditorConfig配置檔案的讀取層級是自上而下的(類似於css規則),最深層的配置檔案,最後讀取。配置規則也是 按照讀取的順序來生效,所以路徑上離程式碼最近的配置規則,優先順序最高。
配置格式詳解
EditorConfig檔案使用INI格式,同時相容Python ConfigParser Library使用的格式,並且左右中括號[]在模組(section)名稱中允許使用 section名稱是路徑的globs,類似於gitignore的格式。 只有正斜槓(/)被允許作為路徑的分隔符,可以試用 # 或者 ;來做註釋,註釋不可以跨行。EditorConfig檔案使用utf-8來編碼, 使用CRLF或者LF來作為行分隔符;
路徑的匹配模式和當前支援的EditorConfig屬性,解釋如下:
萬用字元模式
萬用字元 | 作用 |
---|---|
* | 匹配任意數量string型別的字元,' / ' 除外 |
** | 匹配任意數量string型別的字元 |
? | 匹配任意單個字元 |
[a-z] | 匹配方括號規定範圍內的任意單個字元 |
[!a-z] | 匹配不在方括號規定範圍內的任意單個字元 |
{s1,s2,s3} | 匹配任意一個大括號內部美劇的字元(','分隔) |
{num1..num2} | 匹配num1和num2之間的任意一個整數,num1和num2正負都可以 |
支援的屬性
注意:並不是所有的屬性都被沒一個外掛支援。想要檢視完整的屬性列表,移步這裡
屬性名 | 型別 | 作用註解 |
---|---|---|
ident_style | string | 設定為‘tab’或者‘space’,分別告知編輯器強制使用tab鍵或者使用智慧的tab(將tab轉為space) |
indent_size | number | 引數為數字,用來定義每次縮排時,要縮排的列數,如果為indent_space設定為space,則每次縮排整數個空格,如果設定為tab,則每個tab為整數列,在這如果tab_width屬性被設定了,則每次縮排為 indent_size * tab_width列 |
end_of_line | string | 設定為‘lf’,‘cr’,‘crlf’來規定如果要換行,換行符如何生成 |
charset | string | 設定字符集:latin1, utf-8, utf-8-bom, utf-16be or utf-16le |
trim_trailing_whitespace | boolean | 設為true時,則在新建空行的時候,移除所有的空格字元 |
insert_final_newline | boolean | 設為true時,會確保檔案在儲存的時候,底部總是以一個新行結尾 |
root | boolean | 特殊的屬性,必須在配置檔案的頂部,在所有的section之外首先設定,設定為true 的時候將結束EditorConfig對配置檔案的向上查詢 |
所有的屬性都是大小寫不敏感的。當他們被外掛識別的時候,統一轉為小寫。通常,如果一個屬性沒有被設定,編輯器將使用自身的預設設定,換句話說就是,如果有屬性沒被設定,EditorConfig也不會應用自己的預設設定,只有明確設定了屬性,這部分規範才會應用到編輯器。
可以接受並且鼓勵某些屬性不被設定。例如:tab_width屬性就不需要設定,除非該屬性和indent_size不同。還有,當index_style被設定為tab時,最好就不要設定indent_size了,以便程式設計師可以試用他們喜歡的縮排距離來閱讀程式碼。此外,如果某個屬性在你的工程裡面是不合乎標準的(例如:end_of_line),最好就不要設定這樣的屬性了。
對於所有的屬性來講,如果屬性值被設定為:unset,就意味著移除該屬性對編輯器的作用,即使該屬性之前已經被設定過了。
不需要外掛的編輯器
一下列出的編輯器已經原生支援EditorConfig,不需要額外安裝外掛。
- BBEdit
- github
- intellij IDEA
- pycharm
- RubyMine
- VisualStudio
- webstorm