Přeskočit obsah

EditorConfig

Modular Text Editor respektuje soubory .editorconfig, takže se editor automaticky přizpůsobí konvencím každého projektu — odsazení, konce řádků, znaková sada, koncové bílé znaky a závěrečný konec řádku — bez jakéhokoli ručního nastavování. Jde o vestavěnou funkci editoru, nikoli o zásuvný modul.

Je tichá a automatická: neexistují k ní žádné příkazy nabídky. Editor čte soubory .editorconfig platné pro daný soubor, když jej otevíráte a ukládáte.

Jak to funguje

Když soubor otevřete, editor stoupá od jeho složky nahoru a sbírá soubory .editorconfig, dokud nedojde k některému označenému root = true (nebo ke kořeni disku). Vyhrávají pravidla z nejbližšího souboru a pozdější sekce přebíjejí dřívější. Výsledná nastavení se uplatní takto:

  • Při otevření — indent_style, indent_size a tab_width se vloží do dokumentu, aby se klávesa Tab, odsazení zpět Backspacem i automatické odsazení řídily konvencí projektu. .editorconfig projektu má přednost před vaším globálním nastavením odsazení (viz Automatické páry a odsazení ▸ přednost).
  • Při uložení — koncové bílé znaky se oříznou, závěrečný konec řádku se přidá či odebere, konce řádků se sjednotí a soubor se zapíše v požadované znakové sadě.

Projektová nastavení se uplatňují tiše, ale zůstávají přebitelná: odsazení můžete vždy změnit ručně a celou funkci lze vypnout (viz Nastavení).

Nastavení

Předvolby ▸ Obecné:

  • Použít nastavení .editorconfig z projektu — zapne nebo vypne celou funkci (ve výchozím stavu zapnuto). Při vypnutí editor .editorconfig zcela ignoruje: neuplatní standardní klíče ani nezpřístupní klíče pro jednotlivé zásuvné moduly popsané níže.

Podporované vlastnosti

EditorConfig definuje malou, pevnou sadu vlastností. Tabulka ukazuje všechny a co s nimi editor dělá. U názvů vlastností a známých hodnot nezáleží na velikosti písmen.

Vlastnost Přijímané hodnoty Co editor udělá
root true / false (musí být před první [sekcí]) true zastaví hledání u tohoto souboru — je to nejvyšší konfigurace.
indent_style tab / space Volí pro odsazování tabulátory nebo mezery.
indent_size celé číslo, nebo tab Nastavuje, kolik sloupců je jedna úroveň odsazení (tab se řídí tab_width).
tab_width celé číslo Nastavuje zobrazenou šířku tabulátoru; výchozí je indent_size.
end_of_line lf / cr / crlf Při uložení sjednotí konce řádků.
charset latin1 / utf-8 / utf-8-bom / utf-16be / utf-16le Při uložení zapíše soubor v tomto kódování.
trim_trailing_whitespace true / false true při uložení odstraní mezery a tabulátory na konci každého řádku.
insert_final_newline true / false true zajistí, že soubor končí právě jedním koncem řádku; false koncové konce řádků odstraní.
max_line_length celé číslo, nebo off Rozpoznáno, ale zatím se neuplatňuje.
spelling_language kód jazyka, například en-US Rozpoznáno, ale zatím se neuplatňuje.
libovolná vlastnost = unset unset Zruší hodnotu nastavenou širším pravidlem a obnoví vlastní výchozí hodnotu editoru.

Dvě vlastnosti se čtou, ale zatím se podle nich nejedná

max_line_length a spelling_language jsou součástí standardu EditorConfig, ale editory je nepodporují všeobecně. Editor je zpracuje (takže nezpůsobují chyby), ale zatím se podle nich neřídí.

end_of_line také rozhoduje, co vloží Enter

Dokument si běžně ponechává konce řádků, které jeho soubor už měl, a Enter vkládá je. Když se uplatní end_of_line, uložení sjednotí buffer a zároveň převede dokument na tuto konvenci, takže hned následující Enter odpovídá tomu, co se právě zapsalo na disk. Část stavového řádku s koncem řádků to následuje.

Značka pořadí bajtů v samotném .editorconfig se ignoruje

.editorconfig uložený editorem ve Windows často začíná značkou pořadí bajtů UTF-8. Editor ji před zpracováním odstraní, takže se první vlastnost souboru — obvykle root = true — přečte normálně.

Porovnávání souborů (globy)

Každá hlavička [sekce] je glob porovnávaný s cestou souboru relativně ke složce obsahující .editorconfig:

Vzor Odpovídá
* libovolným znakům kromě oddělovače cesty (/)
** libovolným znakům včetně / (přesahuje složky)
? právě jednomu znaku kromě /
{a,b,c} kterémukoli z řetězců oddělených čárkami
{1..9} libovolnému celému číslu v rozsahu
[abc] libovolnému jednomu znaku z množiny
[!abc] libovolnému jednomu znaku, který v množině není
název vzor bez / odpovídá v kterékoli podsložce
/název úvodní / ukotví shodu na složku konfiguračního souboru

Nastavení jednotlivých zásuvných modulů

Kromě standardních klíčů může .editorconfig nést i konfiguraci jednotlivých zásuvných modulů. Modul čte vlastní nastavení pod jmenným prostorem mte.<plugin-id>.<key> a projektová hodnota přebíjí pro soubory v tomto projektu globální předvolbu uživatele (nastavenou v Předvolbách). Řídí to týž přepínač Použít nastavení .editorconfig výše — vypněte jej a i tyto klíče se ignorují.

Dostupné klíče zásuvných modulů

Toto je úplný seznam nastavení modulů, která dnes editor z .editorconfig respektuje. Roste, jen když se k tomu modul výslovně přihlásí; klíč, který zde není uveden (včetně klíčů modulů, které .editorconfig nečtou), se zpracuje, ale nemá žádný účinek.

Klíč Typ Výchozí Účinek
mte.org.mte.url.enabled true / false globální přepínač Zvýrazňovače URL (Předvolby) Zapne či vypne rozpoznávání a zvýrazňování URL pro soubory v tomto projektu.

Příklad — vypnutí zvýrazňování URL pro jeden projekt bez ohledu na globální přepínač:

[*]
mte.org.mte.url.enabled = false

Proč tak málo?

Klíče jednotlivých modulů jsou záměrně omezené na skutečné projektové konvence (nastavení, která by tým zakomitoval a sdílel). Většina nastavení modulů — historie hledání, intervaly automatického ukládání, naposledy otevřená složka, přiřazení souborů v operačním systému — jsou osobním nebo strojovým stavem a do sdíleného .editorconfig záměrně nepatří. Klasickou projektovou konvenci, odsazení, pokrývají standardní klíče výše. Jak budou moduly funkci přijímat, mohou zde přibývat další klíče.

Příklad

.editorconfig umístěný v kořeni projektu, používající každou vlastnost i podobu globu:

# Top-most config in the project: stop searching parent directories.
root = true

# Defaults for every file in this tree.
[*]
indent_style = space
indent_size = 4
tab_width = 4
end_of_line = lf
charset = utf-8
trim_trailing_whitespace = true
insert_final_newline = true
# max_line_length and spelling_language are recognised but not yet applied.
max_line_length = 100
spelling_language = en-US

# Makefiles must use real tabs.
[Makefile]
indent_style = tab

# 2-space indent for web/markup/data files (brace alternation).
[*.{js,ts,json,yml,yaml,html,css}]
indent_size = 2

# Markdown keeps trailing whitespace (two spaces = a hard line break).
[*.md]
trim_trailing_whitespace = false

# Windows batch files want CRLF and a legacy code page.
[*.{bat,cmd}]
end_of_line = crlf
charset = latin1

# '**' spans folders; '?' matches one character.
[docs/**.txt]
indent_size = 2
[log/file?.log]
indent_size = 8

# Integer-range and character-class globs.
[page{1..9}.txt]
indent_size = 1
[[Mm]akefile.inc]
indent_style = tab

# A leading '/' anchors to this file's folder only.
[/CHANGELOG.md]
max_line_length = off

# 'unset' clears a value set by a broader rule.
[lib/legacy/*]
indent_style = unset
indent_size = unset

# A plugin's own setting (URL Highlighter), overriding the global toggle here.
mte.org.mte.url.enabled = false

Komentáře musí být na vlastním řádku

EditorConfig nemá vložené komentáře. # nebo ; začíná komentář pouze na začátku řádku. Napsáním indent_size = 4 # čtyři získá hodnota podobu 4 # čtyři, což je neplatné a tiše se to ignoruje — napište komentář raději na řádek nad tím. (Takto se chová každý další editor, který EditorConfig zná.)