Vai al contenuto

EditorConfig

Modular Text Editor rispetta i file .editorconfig, così l'editor si adegua automaticamente alle convenzioni di ciascun progetto — rientro, fine riga, set di caratteri, spazi bianchi finali e ritorno a capo finale — senza alcuna configurazione manuale. Questa è una funzionalità integrata dell'editor, non un plugin.

È silenziosa e automatica: non ci sono comandi di menu. L'editor legge i file .editorconfig che si applicano a un file quando lo apri e quando lo salvi.

Come funziona

Quando apri un file, l'editor risale dalla cartella del file raccogliendo file .editorconfig finché non raggiunge uno marcato con root = true (o la radice dell'unità). Vincono le regole del file più vicino, e le sezioni successive sostituiscono le precedenti. Le impostazioni risultanti vengono applicate così:

  • All'apertura — indent_style, indent_size e tab_width vengono spinti nel documento, così il tasto Tab, il backspace che riduce il rientro e il rientro automatico seguono tutti la convenzione del progetto. Il .editorconfig di un progetto ha la precedenza sulla tua impostazione globale di rientro (vedi Coppie automatiche e rientro ▸ precedenza).
  • Al salvataggio — gli spazi bianchi finali vengono tagliati, il ritorno a capo finale viene aggiunto/rimosso, i fine riga vengono normalizzati e il file viene scritto nel set di caratteri richiesto.

Le impostazioni del progetto si applicano in silenzio ma restano sostituibili: puoi sempre cambiare il rientro a mano, e l'intera funzionalità si può disattivare (vedi Impostazioni).

Impostazioni

Preferenze ▸ Generale:

  • Applica le impostazioni di .editorconfig del progetto — attiva o disattiva l'intera funzionalità (attiva per impostazione predefinita). Quando è disattivata, l'editor ignora del tutto .editorconfig: non applica le chiavi standard né espone le chiavi per plugin descritte più sotto.

Proprietà supportate

EditorConfig definisce un insieme di proprietà piccolo e fisso. La tabella le mostra tutte e indica che cosa ne fa l'editor. I nomi delle proprietà e i valori noti non distinguono maiuscole e minuscole.

Proprietà Valori accettati Che cosa fa l'editor
root true / false (deve comparire prima della prima [sezione]) true interrompe la ricerca a questo file: è la configurazione più alta.
indent_style tab / space Sceglie tabulazioni o spazi per il rientro.
indent_size un numero intero, oppure tab Imposta quante colonne occupa un livello di rientro (tab segue tab_width).
tab_width un numero intero Imposta la larghezza visiva di una tabulazione; per impostazione predefinita assume il valore di indent_size.
end_of_line lf / cr / crlf Normalizza i fine riga al salvataggio.
charset latin1 / utf-8 / utf-8-bom / utf-16be / utf-16le Scrive il file in questa codifica al salvataggio.
trim_trailing_whitespace true / false true rimuove spazi/tabulazioni in fondo a ogni riga al salvataggio.
insert_final_newline true / false true garantisce che il file finisca con esattamente un ritorno a capo; false rimuove i ritorni a capo finali.
max_line_length un numero intero, oppure off Riconosciuta, ma non ancora applicata.
spelling_language un codice di lingua, ad es. en-US Riconosciuta, ma non ancora applicata.
qualsiasi proprietà = unset unset Azzera un valore impostato da una regola più ampia, ripristinando il valore predefinito dell'editor stesso.

Due proprietà vengono lette ma non hanno ancora effetto

max_line_length e spelling_language fanno parte dello standard EditorConfig, ma non sono supportate universalmente dagli editor. L'editor le analizza (quindi non causano errori), ma non agisce ancora su di esse.

end_of_line decide anche che cosa inserisce Invio

Un documento normalmente mantiene i fine riga che il suo file aveva già, e Invio inserisce quelli. Quando si applica un end_of_line, il salvataggio normalizza il buffer e porta il documento su quella convenzione, così il prossimo Invio corrisponde a quanto appena scritto su disco. Il segmento di fine riga della barra di stato si adegua.

Un marcatore di ordine dei byte nel .editorconfig stesso viene ignorato

Un .editorconfig salvato da un editor Windows spesso inizia con un marcatore di ordine dei byte UTF-8. L'editor lo rimuove prima di analizzarlo, così la prima proprietà del file —di solito root = true— viene letta normalmente.

Corrispondenza dei file (glob)

Ogni intestazione [sezione] è un glob confrontato con il percorso del file, relativo alla cartella che contiene il .editorconfig:

Schema Corrisponde a
* qualsiasi carattere tranne un separatore di percorso (/)
** qualsiasi carattere, incluso / (attraversa le cartelle)
? esattamente un carattere diverso da /
{a,b,c} una qualsiasi delle stringhe separate da virgola
{1..9} qualsiasi intero nell'intervallo
[abc] qualsiasi singolo carattere dell'insieme
[!abc] qualsiasi singolo carattere non presente nell'insieme
name uno schema senza / corrisponde in qualsiasi sottocartella
/name una / iniziale ancora la corrispondenza alla cartella del file di configurazione

Impostazioni per plugin

Oltre alle chiavi standard, .editorconfig può portare anche configurazione per plugin. Un plugin legge le proprie impostazioni sotto lo spazio dei nomi mte.<plugin-id>.<key>, e un valore del progetto sostituisce la preferenza globale dell'utente (impostata nelle Preferenze) per i file di quel progetto. Questo dipende dallo stesso interruttore Applica le impostazioni di .editorconfig di cui sopra: disattivalo e anche queste chiavi vengono ignorate.

Chiavi di plugin disponibili

Questo è l'elenco completo delle impostazioni di plugin che l'editor rispetta oggi da .editorconfig. Cresce solo quando un plugin aderisce esplicitamente; qualsiasi chiave non elencata qui (comprese quelle di plugin che non leggono .editorconfig) viene analizzata, ma non ha effetto.

Chiave Tipo Predefinito Effetto
mte.org.mte.url.enabled true / false l'interruttore globale dell'Evidenziazione degli URL (Preferenze) Attiva o disattiva il rilevamento e l'evidenziazione degli URL per i file di questo progetto.

Esempio: disattivare l'evidenziazione degli URL per un progetto, indipendentemente dall'interruttore globale:

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

Perché così poche?

Le chiavi per plugin sono intenzionalmente limitate a vere convenzioni di progetto (impostazioni che una squadra registrerebbe e condividerebbe). La maggior parte delle impostazioni di plugin —cronologia di ricerca, intervalli di salvataggio automatico, l'ultima cartella aperta, le associazioni di file del sistema operativo— è stato personale o della macchina e deliberatamente non appartiene a un .editorconfig condiviso. La classica convenzione di progetto, il rientro, è coperta dalle chiavi standard di cui sopra. Altre chiavi di plugin potrebbero comparire qui man mano che i plugin adottano la funzionalità.

Esempio

Un .editorconfig collocato nella radice di un progetto, che usa ogni proprietà e forma di glob:

# 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

I commenti devono stare su una riga propria

EditorConfig non ha commenti in linea. Un # o un ; iniziano un commento solo all'inizio di una riga. Scrivere indent_size = 4 # quattro rende il valore 4 # quattro, che non è valido e viene ignorato in silenzio: metti invece il commento sulla riga sopra. (Questo corrisponde a ogni altro editor che conosce EditorConfig.)