EditorConfig¶
Modular Text Editor honoruje pliki .editorconfig,
więc edytor automatycznie dopasowuje się do konwencji każdego projektu —
wcięcia, końce linii, zestaw znaków, końcowe spacje i końcowy znak nowej linii —
bez żadnej ręcznej konfiguracji. To wbudowana funkcja edytora, nie wtyczka.
Działa cicho i automatycznie: nie ma poleceń w menu. Edytor czyta pliki
.editorconfig dotyczące danego pliku przy jego otwieraniu i zapisywaniu.
Jak to działa¶
Przy otwieraniu pliku edytor wędruje w górę od folderu pliku, zbierając pliki
.editorconfig, aż trafi na plik oznaczony root = true (lub na korzeń
dysku). Wygrywają reguły z najbliższego pliku, a późniejsze sekcje nadpisują
wcześniejsze. Wynikowe ustawienia stosowane są tak:
- Przy otwarciu —
indent_style,indent_sizeitab_widthtrafiają do dokumentu, więc klawisz Tab, cofanie wcięcia Backspace i automatyczne wcięcia podążają za konwencją projektu..editorconfigprojektu ma pierwszeństwo przed Twoim globalnym ustawieniem wcięć (zobacz Autopary i wcięcia ▸ pierwszeństwo). - Przy zapisie — końcowe spacje są usuwane, końcowy znak nowej linii jest dodawany/usuwany, końce linii normalizowane, a plik zapisywany w żądanym zestawie znaków.
Ustawienia projektu działają cicho, ale dają się nadpisać: zawsze możesz zmienić wcięcia ręcznie, a całą funkcję można wyłączyć (zobacz Ustawienia).
Ustawienia¶
Preferencje ▸ Ogólne:
- Stosuj ustawienia .editorconfig z projektu — włącza lub wyłącza całą
funkcję (domyślnie włączona). Po wyłączeniu edytor całkowicie ignoruje
.editorconfig: nie stosuje ani kluczy standardowych, ani kluczy per wtyczka opisanych poniżej.
Obsługiwane właściwości¶
EditorConfig definiuje mały, stały zestaw właściwości. Tabela pokazuje każdą z nich i to, co edytor z nią robi. Nazwy właściwości i znane wartości nie rozróżniają wielkości liter.
| Właściwość | Akceptowane wartości | Co robi edytor |
|---|---|---|
root |
true / false (musi wystąpić przed pierwszą [sekcją]) |
true zatrzymuje wyszukiwanie na tym pliku — to najwyższa konfiguracja. |
indent_style |
tab / space |
Wybiera tabulatory lub spacje do wcięć. |
indent_size |
liczba całkowita lub tab |
Ustala, ile kolumn ma jeden poziom wcięcia (tab podąża za tab_width). |
tab_width |
liczba całkowita | Ustala wizualną szerokość tabulatora; domyślnie równa indent_size. |
end_of_line |
lf / cr / crlf |
Normalizuje końce linii przy zapisie. |
charset |
latin1 / utf-8 / utf-8-bom / utf-16be / utf-16le |
Zapisuje plik w tym kodowaniu. |
trim_trailing_whitespace |
true / false |
true usuwa spacje/tabulatory na końcach linii przy zapisie. |
insert_final_newline |
true / false |
true gwarantuje dokładnie jeden znak nowej linii na końcu pliku; false usuwa końcowe znaki nowej linii. |
max_line_length |
liczba całkowita lub off |
Rozpoznawana, ale jeszcze nie stosowana. |
spelling_language |
kod języka, np. en-US |
Rozpoznawana, ale jeszcze nie stosowana. |
dowolna właściwość = unset |
unset |
Czyści wartość ustawioną przez szerszą regułę, przywracając domyślne ustawienie edytora. |
Dwie właściwości są czytane, ale jeszcze nie działają
max_line_length i spelling_language należą do standardu EditorConfig,
ale nie są powszechnie obsługiwane przez edytory. Edytor je parsuje (więc
nie powodują błędów), ale jeszcze na nie nie reaguje.
end_of_line decyduje też, co wstawia Enter
Dokument normalnie zachowuje zakończenia wierszy, które miał jego plik, a
Enter wstawia właśnie je. Gdy obowiązuje end_of_line, zapis normalizuje
bufor oraz przestawia dokument na tę konwencję, więc kolejne naciśnięcie
Enter pasuje do tego, co przed chwilą trafiło na dysk. Segment zakończeń
wierszy na pasku stanu podąża za tą zmianą.
Znacznik BOM w samym pliku .editorconfig jest ignorowany
Plik .editorconfig zapisany edytorem windowsowym często zaczyna się od
znacznika kolejności bajtów UTF-8. Edytor usuwa go przed parsowaniem, więc
pierwsza właściwość pliku — zwykle root = true — jest odczytywana
normalnie.
Dopasowywanie plików (globy)¶
Każdy nagłówek [sekcji] to glob dopasowywany do ścieżki pliku, względem
folderu zawierającego .editorconfig:
| Wzorzec | Dopasowuje |
|---|---|
* |
dowolne znaki poza separatorem ścieżki (/) |
** |
dowolne znaki, łącznie z / (obejmuje foldery) |
? |
dokładnie jeden znak poza / |
{a,b,c} |
dowolny z łańcuchów rozdzielonych przecinkami |
{1..9} |
dowolną liczbę całkowitą z zakresu |
[abc] |
dowolny pojedynczy znak ze zbioru |
[!abc] |
dowolny pojedynczy znak spoza zbioru |
name |
wzorzec bez / dopasowuje w każdym podfolderze |
/name |
wiodący / kotwiczy dopasowanie do folderu pliku konfiguracji |
Ustawienia per wtyczka¶
Poza kluczami standardowymi .editorconfig może też przenosić konfigurację
per wtyczka. Wtyczka czyta własne ustawienia w przestrzeni nazw
mte.<plugin-id>.<key>, a wartość projektu nadpisuje globalną preferencję
użytkownika (z Preferencji) dla plików tego projektu. Podlega to temu samemu
przełącznikowi Stosuj ustawienia .editorconfig — po jego wyłączeniu te
klucze też są ignorowane.
Dostępne klucze wtyczek¶
To kompletna lista ustawień wtyczek honorowanych dziś z .editorconfig.
Rośnie tylko wtedy, gdy wtyczka jawnie się do tego zgłosi; każdy klucz spoza
listy (w tym klucze wtyczek, które nie czytają .editorconfig) jest parsowany,
ale nie działa.
| Klucz | Typ | Domyślnie | Efekt |
|---|---|---|---|
mte.org.mte.url.enabled |
true / false |
globalny przełącznik Podświetlania URL (Preferencje) | Włącza lub wyłącza wykrywanie i podświetlanie URL-i dla plików tego projektu. |
Przykład — wyłączenie podświetlania URL-i w jednym projekcie, niezależnie od globalnego przełącznika:
Dlaczego tak mało?
Klucze per wtyczka są celowo ograniczone do prawdziwych konwencji
projektu (ustawień, które zespół commituje i współdzieli). Większość
ustawień wtyczek — historia wyszukiwania, interwały autozapisu, ostatnio
otwarty folder, systemowe skojarzenia plików — to stan osobisty lub stan
maszyny i celowo nie należą do współdzielonego .editorconfig.
Klasyczna konwencja projektu, wcięcia, jest pokryta kluczami standardowymi
powyżej. Kolejne klucze wtyczek mogą się tu pojawiać w miarę adopcji.
Przykład¶
Plik .editorconfig w korzeniu projektu, używający każdej właściwości i formy
globa:
# 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
Komentarze muszą stać w osobnej linii
EditorConfig nie ma komentarzy w linii. Znak # lub ; zaczyna
komentarz tylko na początku linii. Zapis indent_size = 4 # four daje
wartość 4 # four, która jest nieprawidłowa i po cichu ignorowana —
umieść komentarz w linii powyżej. (Tak samo działa każdy inny edytor
wspierający EditorConfig.)