Pular para conteúdo

EditorConfig

O Modular Text Editor respeita os arquivos .editorconfig, de modo que o editor se ajusta automaticamente às convenções de cada projeto — recuo, fins de linha, conjunto de caracteres, espaços em branco no fim e nova linha final — sem qualquer configuração manual. Este é um recurso integrado do editor, não um plugin.

Ele é silencioso e automático: não há comandos de menu. O editor lê os arquivos .editorconfig que se aplicam a um arquivo quando você o abre e quando o salva.

Como funciona

Quando você abre um arquivo, o editor sobe a partir da pasta do arquivo colhendo arquivos .editorconfig até chegar a um marcado com root = true (ou à raiz da unidade). Vencem as regras do arquivo mais próximo, e as seções posteriores substituem as anteriores. As configurações resultantes são aplicadas assim:

  • Ao abrir — indent_style, indent_size e tab_width são empurrados para o documento, para que a tecla Tab, o recuo reverso do backspace e o recuo automático sigam a convenção do projeto. O .editorconfig de um projeto tem precedência sobre a sua configuração global de recuo (veja Pares automáticos e recuo ▸ precedência).
  • Ao salvar — os espaços em branco do fim são aparados, a nova linha final é acrescentada/removida, os fins de linha são normalizados e o arquivo é gravado no conjunto de caracteres solicitado.

As configurações do projeto se aplicam silenciosamente, mas continuam substituíveis: você sempre pode mudar o recuo manualmente, e o recurso inteiro pode ser desligado (veja Configurações).

Configurações

Preferências ▸ Geral:

  • Aplicar as configurações do .editorconfig do projeto — liga ou desliga o recurso inteiro (ligado por padrão). Quando desligado, o editor ignora o .editorconfig completamente: ele não aplica as chaves padrão nem expõe as chaves por plugin descritas abaixo.

Propriedades suportadas

O EditorConfig define um conjunto pequeno e fixo de propriedades. A tabela mostra todas elas e o que o editor faz com cada uma. Os nomes das propriedades e os valores conhecidos não diferenciam maiúsculas de minúsculas.

Propriedade Valores aceitos O que o editor faz
root true / false (deve aparecer antes da primeira [seção]) true interrompe a busca neste arquivo — ele é a configuração mais alta.
indent_style tab / space Escolhe tabulações ou espaços para recuar.
indent_size um número inteiro, ou tab Define quantas colunas tem um nível de recuo (tab segue tab_width).
tab_width um número inteiro Define a largura visual de uma tabulação; por padrão assume o valor de indent_size.
end_of_line lf / cr / crlf Normaliza os fins de linha ao salvar.
charset latin1 / utf-8 / utf-8-bom / utf-16be / utf-16le Grava o arquivo nesta codificação ao salvar.
trim_trailing_whitespace true / false true remove espaços/tabulações no fim de cada linha ao salvar.
insert_final_newline true / false true garante que o arquivo termine com exatamente uma nova linha; false remove as novas linhas finais.
max_line_length um número inteiro, ou off Reconhecida, mas ainda não aplicada.
spelling_language um código de idioma, p. ex. en-US Reconhecida, mas ainda não aplicada.
qualquer propriedade = unset unset Limpa um valor definido por uma regra mais ampla, restaurando o padrão do próprio editor.

Duas propriedades são lidas, mas ainda não têm efeito

max_line_length e spelling_language fazem parte do padrão EditorConfig, mas não são universalmente suportadas pelos editores. O editor as analisa (então elas não causam erros), mas ainda não age sobre elas.

end_of_line também decide o que o Enter insere

Um documento normalmente mantém os fins de linha que o arquivo já tinha, e o Enter insere esses. Quando um end_of_line se aplica, o salvamento normaliza o buffer e move o documento para aquela convenção, de modo que o Enter seguinte corresponda ao que acabou de ser gravado no disco. O segmento de fim de linha da barra de status acompanha.

Uma marca de ordem de bytes no próprio .editorconfig é ignorada

Um .editorconfig salvo por um editor do Windows muitas vezes começa com uma marca de ordem de bytes UTF-8. O editor a remove antes de analisar, então a primeira propriedade do arquivo — em geral root = true — é lida normalmente.

Correspondência de arquivos (globs)

Cada cabeçalho [seção] é um glob comparado com o caminho do arquivo, relativo à pasta que contém o .editorconfig:

Padrão Corresponde a
* quaisquer caracteres, exceto um separador de caminho (/)
** quaisquer caracteres, incluindo / (abrange pastas)
? exatamente um caractere que não seja /
{a,b,c} qualquer uma das cadeias separadas por vírgula
{1..9} qualquer inteiro no intervalo
[abc] qualquer caractere único do conjunto
[!abc] qualquer caractere único que não esteja no conjunto
name um padrão sem / corresponde em qualquer subpasta
/name uma / inicial ancora a correspondência à pasta do arquivo de configuração

Configurações por plugin

Além das chaves padrão, o .editorconfig também pode carregar configuração por plugin. Um plugin lê suas próprias configurações sob o espaço de nomes mte.<plugin-id>.<key>, e um valor do projeto substitui a preferência global do usuário (definida nas Preferências) para os arquivos daquele projeto. Isso depende da mesma alternância Aplicar as configurações do .editorconfig acima — desligue-a e essas chaves também são ignoradas.

Chaves de plugin disponíveis

Esta é a lista completa de configurações de plugin que o editor respeita hoje a partir do .editorconfig. Ela só cresce quando um plugin adere explicitamente; qualquer chave não listada aqui (incluindo as de plugins que não leem o .editorconfig) é analisada, mas não tem efeito.

Chave Tipo Padrão Efeito
mte.org.mte.url.enabled true / false a alternância global do Realce de URL (Preferências) Ativa ou desativa a detecção e o realce de URLs para os arquivos deste projeto.

Exemplo — desligar o realce de URLs em um projeto, independentemente da alternância global:

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

Por que tão poucas?

As chaves por plugin são intencionalmente limitadas a convenções de projeto genuínas (configurações que uma equipe registraria e compartilharia). A maioria das configurações de plugin — histórico de busca, intervalos de salvamento automático, a última pasta aberta, associações de arquivo do sistema operacional — é estado pessoal ou da máquina e deliberadamente não pertence a um .editorconfig compartilhado. A convenção clássica de projeto, o recuo, está coberta pelas chaves padrão acima. Mais chaves de plugin podem aparecer aqui conforme os plugins adotarem o recurso.

Exemplo

Um .editorconfig colocado na raiz de um projeto, usando todas as propriedades e formas de 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

Os comentários precisam ficar na própria linha

O EditorConfig não tem comentários em linha. Um # ou um ; só iniciam um comentário no começo de uma linha. Escrever indent_size = 4 # quatro faz o valor virar 4 # quatro, que é inválido e ignorado em silêncio — coloque o comentário na linha de cima. (Isso corresponde a todos os outros editores que entendem EditorConfig.)