Zum Inhalt

EditorConfig

Der Modular Text Editor beachtet .editorconfig- Dateien und übernimmt so automatisch die Konventionen jedes Projekts — Einrückung, Zeilenenden, Zeichensatz, Leerzeichen am Zeilenende und abschließender Zeilenumbruch — ganz ohne manuelle Einrichtung. Dies ist eine eingebaute Funktion des Editors, kein Plugin.

Sie arbeitet still und automatisch: Es gibt keine Menübefehle. Der Editor liest die für eine Datei geltenden .editorconfig-Dateien beim Öffnen und Speichern.

Wie es funktioniert

Beim Öffnen einer Datei wandert der Editor vom Ordner der Datei aufwärts und sammelt .editorconfig-Dateien, bis er eine mit root = true erreicht (oder die Laufwerkswurzel). Regeln aus der nächstgelegenen Datei gewinnen, spätere Abschnitte überschreiben frühere. Die resultierenden Einstellungen werden so angewendet:

  • Beim Öffnenindent_style, indent_size und tab_width werden in das Dokument übernommen, sodass die Tab-Taste, Backspace-Ausrücken und die automatische Einrückung der Konvention des Projekts folgen. Die .editorconfig eines Projekts hat Vorrang vor Ihrer globalen Einrückungseinstellung (siehe Auto-Paare & Einrückung ▸ Vorrang).
  • Beim Speichern — Leerzeichen am Zeilenende werden entfernt, der abschließende Zeilenumbruch wird ergänzt/entfernt, Zeilenenden werden normalisiert und die Datei wird im gewünschten Zeichensatz geschrieben.

Projekteinstellungen wirken still, bleiben aber übersteuerbar: Sie können die Einrückung jederzeit von Hand ändern, und die ganze Funktion lässt sich abschalten (siehe Einstellungen).

Einstellungen

Einstellungen ▸ Allgemein:

  • .editorconfig-Einstellungen aus dem Projekt anwenden — schaltet die gesamte Funktion ein oder aus (standardmäßig ein). Ist sie aus, ignoriert der Editor .editorconfig vollständig: Weder die Standardschlüssel noch die unten beschriebenen Plugin-Schlüssel werden angewendet.

Unterstützte Eigenschaften

EditorConfig definiert einen kleinen, festen Satz von Eigenschaften. Die Tabelle zeigt jede davon und was der Editor damit tut. Eigenschaftsnamen und die bekannten Werte sind unabhängig von Groß-/Kleinschreibung.

Eigenschaft Zulässige Werte Was der Editor tut
root true / false (muss vor dem ersten [Abschnitt] stehen) true beendet die Suche bei dieser Datei — sie ist die oberste Konfiguration.
indent_style tab / space Wählt Tabs oder Leerzeichen zum Einrücken.
indent_size eine ganze Zahl oder tab Legt fest, wie viele Spalten eine Einrückungsstufe hat (tab folgt tab_width).
tab_width eine ganze Zahl Legt die sichtbare Breite eines Tabs fest; Standard ist indent_size.
end_of_line lf / cr / crlf Normalisiert Zeilenenden beim Speichern.
charset latin1 / utf-8 / utf-8-bom / utf-16be / utf-16le Schreibt die Datei beim Speichern in dieser Kodierung.
trim_trailing_whitespace true / false true entfernt Leerzeichen/Tabs am Ende jeder Zeile beim Speichern.
insert_final_newline true / false true stellt genau einen Zeilenumbruch am Dateiende sicher; false entfernt abschließende Zeilenumbrüche.
max_line_length eine ganze Zahl oder off Wird erkannt, aber noch nicht angewendet.
spelling_language ein Sprachcode, z. B. en-US Wird erkannt, aber noch nicht angewendet.
beliebige Eigenschaft = unset unset Löscht einen von einer breiteren Regel gesetzten Wert und stellt den Editor-Standard wieder her.

Zwei Eigenschaften werden gelesen, aber noch nicht umgesetzt

max_line_length und spelling_language gehören zum EditorConfig-Standard, werden aber nicht von allen Editoren unterstützt. Der Editor parst sie (sie verursachen also keine Fehler), setzt sie aber noch nicht um.

Dateizuordnung (Globs)

Jede [Abschnitts]-Überschrift ist ein Glob, das gegen den Dateipfad relativ zum Ordner der .editorconfig geprüft wird:

Muster Trifft auf
* beliebige Zeichen außer dem Pfadtrenner (/)
** beliebige Zeichen einschließlich / (über Ordner hinweg)
? genau ein Zeichen außer /
{a,b,c} eine der kommagetrennten Zeichenketten
{1..9} eine ganze Zahl im Bereich
[abc] ein einzelnes Zeichen aus der Menge
[!abc] ein einzelnes Zeichen nicht aus der Menge
name ein Muster ohne / trifft in jedem Unterordner
/name ein führendes / verankert den Treffer im Ordner der Konfigurationsdatei

Plugin-eigene Einstellungen

Neben den Standardschlüsseln kann .editorconfig auch Plugin-eigene Konfiguration transportieren. Ein Plugin liest seine Einstellungen im Namensraum mte.<plugin-id>.<schlüssel>, und ein Projektwert übersteuert die globale Benutzereinstellung (aus den Einstellungen) für Dateien dieses Projekts. Das unterliegt demselben Schalter .editorconfig-Einstellungen anwenden — ist er aus, werden auch diese Schlüssel ignoriert.

Verfügbare Plugin-Schlüssel

Dies ist die vollständige Liste der Plugin-Einstellungen, die der Editor heute aus .editorconfig übernimmt. Sie wächst nur, wenn ein Plugin sich ausdrücklich dafür entscheidet; jeder nicht gelistete Schlüssel (auch für Plugins, die .editorconfig nicht lesen) wird geparst, bleibt aber wirkungslos.

Schlüssel Typ Standard Wirkung
mte.org.mte.url.enabled true / false der globale Schalter der URL-Hervorhebung (Einstellungen) Aktiviert oder deaktiviert URL-Erkennung und -Hervorhebung für Dateien dieses Projekts.

Beispiel — URL-Hervorhebung für ein Projekt abschalten, unabhängig vom globalen Schalter:

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

Warum so wenige?

Plugin-Schlüssel sind bewusst auf echte Projektkonventionen beschränkt (Einstellungen, die ein Team committen und teilen würde). Die meisten Plugin-Einstellungen — Suchverlauf, Autospeicher-Intervalle, der zuletzt geöffnete Ordner, OS-Dateizuordnungen — sind persönlicher oder Maschinenzustand und gehören bewusst nicht in eine geteilte .editorconfig. Die klassische Projektkonvention, die Einrückung, decken die Standardschlüssel oben ab. Weitere Plugin-Schlüssel können hier erscheinen, wenn Plugins die Funktion übernehmen.

Beispiel

Eine .editorconfig in der Projektwurzel, die jede Eigenschaft und Glob-Form verwendet:

# 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

Kommentare müssen in einer eigenen Zeile stehen

EditorConfig kennt keine Inline-Kommentare. Ein # oder ; beginnt einen Kommentar nur am Zeilenanfang. indent_size = 4 # four ergibt den Wert 4 # four, der ungültig ist und stillschweigend ignoriert wird — setzen Sie den Kommentar stattdessen in die Zeile darüber. (So verhält sich jeder andere EditorConfig-fähige Editor.)