前端綜合能力系列之EditorConfig

ZKL發表於2018-04-13

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

需要下載外掛的常用編輯器

相關文章