Przejdź do treści

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_size i tab_width trafiają do dokumentu, więc klawisz Tab, cofanie wcięcia Backspace i automatyczne wcięcia podążają za konwencją projektu. .editorconfig projektu 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:

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

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.)