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_sizeetab_widthsã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.editorconfigde 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
.editorconfigcompletamente: 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:
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.)