EditorConfig-generator
En .editorconfig i repots rot talar om för varje modern IDE hur det här projektet formaterar sina filer och avgör diskussionen om tabbar kontra mellanslag fil för fil. Det svåra är inte det globala blocket, utan sektionerna per språk: i YAML går det över huvud taget inte att göra indrag med tabbar, make vägrar en kommandorad som börjar med ett mellanslag, och ett skalskript som sparats med CRLF går inte att köra. Välj språken i ditt repo, så skriver generatorn den sektion vart och ett behöver, med en anmärkning bredvid som förklarar varför sektionen finns där.
Så bygger du en .editorconfig
-
1
Välj språken i ditt repo
JavaScript, JSON, HTML och CSS, YAML, Python, PHP, Go, Rust, Ruby, Java, Markdown, Makefile, skalskript och Windows-batchfiler. Varje ruta du kryssar i lägger till en sektion.
-
2
Ställ in reglerna som varje fil ärver
Indragsstil och -storlek, radslut, teckenuppsättning, avslutande radbrytning, efterföljande blanksteg och radlängdsgränsen. De hamnar i `[*]`-blocket högst upp, och varje sektion nedanför åsidosätter bara det som dess språk faktiskt behöver.
-
3
Läs varför varje sektion finns där
Tabellen bredvid filen förklarar varje sektion som skrivits, så att du kan ta bort dem ditt team inte vill ha innan du committar.
-
4
Kopiera den till repots rot
Spara den som `.editorconfig` bredvid din `.gitignore`. Editorer plockar upp den vid nästa fil du öppnar, utan byggsteg och utan plugin-konfiguration.
Vad .editorconfig gör
En fil med namnet .editorconfig i roten av ett projekt deklarerar formateringskonventioner. Editorer med EditorConfig-stöd (varje större IDE och de flesta moderna textredigerare) tillämpar de reglerna när en fil öppnas. Sökningen går uppåt i katalogträdet från filen som redigeras och stannar vid den första filen som säger root = true.
Exempel på utdata
Med standardinställningarna (mellanslag, indragsstorlek 4, LF, utf-8) och de två sektioner som redan är ikryssade genererar verktyget:
root = true
[*]
indent_style = space
indent_size = 4
end_of_line = lf
charset = utf-8
trim_trailing_whitespace = true
insert_final_newline = true
max_line_length = 120
[*.{md,markdown}]
trim_trailing_whitespace = false
[{Makefile,makefile,GNUmakefile,*.mk}]
indent_style = tab
Kryssa i Python, Go eller YAML så dyker motsvarande sektion upp nedanför, redan med den konvention som ekosystemets formaterare tvingar fram.
Viktiga direktiv
| Direktiv | Tillåtna värden | Anmärkningar |
|---|---|---|
| root | true | Sätt det i projektroten så att sökningen stannar där |
| charset | latin1, utf-8, utf-8-bom, utf-16be, utf-16le | utf-8 är det vanliga valet. Specifikationen avråder från byteordningsmärket, och de två utf-16-varianterna gäller varje fil, vilket de flesta byggverktyg inte kan läsa |
| end_of_line | lf, crlf, cr | lf för plattformsoberoende arbete; crlf bara för repon som enbart används på Windows |
| indent_style | space, tab | |
| indent_size | ett heltal, eller tab | Med indent_style = tab ignoreras det inte: tab_width faller tillbaka på det, så det styr hur bred en tabb ser ut |
| tab_width | ett heltal | Behövs sällan, eftersom den som standard följer indent_size |
| insert_final_newline | true, false | Håller filerna POSIX-korrekta och diffarna rena |
| trim_trailing_whitespace | true, false | Stäng av det för Markdown, där efterföljande mellanslag betyder en radbrytning |
| max_line_length | ett positivt heltal, eller unset | Inte i kärnspecifikationen; den lever i egenskapswikin. För ingen gräns, utelämna raden i stället för att skriva 0 |
Tre regler som stoppar bygget, inte bara bryter mot en stilguide
De flesta inställningarna i en .editorconfig är smaksak. De här tre är det inte, och de är skälet till att det är värt att ha en sektion per språk:
- YAML förbjuder tabbtecknet för indrag. Det är ett parsningsfel, inte en lint-varning. Om ditt projekt gör indrag med tabbar och du har workflows i GitHub Actions, Docker Compose-filer eller Kubernetes-manifest måste YAML-sektionen tvinga tillbaka mellanslag.
makekräver ett riktigt tabbtecken i början av varje kommandorad i en regel. Ett mellanslag germissing separator. Stop.och bygget avbryts. Det är därför[{Makefile,makefile,GNUmakefile,*.mk}]räknar upp flera stavningar: EditorConfig matchar filnamn skiftlägeskänsligt, och repon innehåller bådeMakefileochmakefile.- Ett skalskript som sparats med CRLF går inte att köra. Kärnan läser vagnreturen som en del av sökvägen till tolken och rapporterar något i stil med
/bin/bash^M: bad interpreter: No such file or directory. Windows-batchfiler har det spegelvända problemet:cmd.exeletar uppgotoochcall :labelvia byteposition, så en.batmed enbart LF kan hoppa till fel rad eller stanna halvvägs utan något felmeddelande alls.
Två av dem kan orsakas av det globala blocket i stället för att lösas av det, och det är därför den här generatorn håller utkik efter dem. Om du väljer tabbar utan att lägga till YAML-sektionen, eller väljer CRLF utan att lägga till skalsektionen, kommer filen som skrivs att förstöra just de filerna trots att de aldrig nämns i den. Generatorn säger till ovanför utdatan i stället för att låta dig upptäcka det via en pipeline som fallerar. Detsamma gäller teckenuppsättningarna utf-16: de gäller varje fil i projektet, och make, skaltolkar och Python kan inte läsa källkod som sparats så.
Språkkonventioner som generatorn skriver
| Språk eller fil | Sektion | Vad den sätter och varför |
|---|---|---|
| JavaScript, TypeScript | *.{js,jsx,mjs,cjs,ts,tsx} |
2 mellanslag, Prettiers standard |
| JSON | *.{json,jsonc} |
2 mellanslag, bredden npm skriver i package.json |
| HTML, CSS, mallar | *.{html,htm,css,scss,sass,less,vue,svelte} |
2 mellanslag, och den indragsbaserade Sass-syntaxen behöver dem för att gå att tolka |
| YAML | *.{yml,yaml} |
2 mellanslag, och mellanslag även när projektet använder tabbar |
| Python | *.{py,pyi} |
4 mellanslag, PEP 8 och Black |
| PHP | *.php |
4 mellanslag, PSR-12. WordPress använder tabbar och Drupal använder 2 |
| Go | {*.go,go.mod} |
Tabbar, eftersom gofmt gör indrag med tabbar |
| Rust | *.rs |
4 mellanslag, rustfmts standard |
| Ruby | {*.rb,*.rake,Gemfile,Rakefile} |
2 mellanslag, RuboCops standard |
| Java | *.java |
4 mellanslag, Oracles konventioner. Googles Java-stil använder 2 |
| Markdown | *.{md,markdown} |
Behåller efterföljande blanksteg, vilket är hur Markdown skriver en radbrytning |
| Makefile | {Makefile,makefile,GNUmakefile,*.mk} |
Tabbar, som make kräver |
| Skalskript | *.{sh,bash,zsh} |
LF, oavsett vad resten av projektet använder |
| Windows-batch | *.{bat,cmd} |
CRLF, eftersom cmd.exe letar upp etiketter via byteposition |
Lägg märke till vad som inte står i den tabellen: radlängder. PEP 8 säger 79, Black säger 88, PSR-12 säger en mjuk gräns på 120 och rustfmt säger 100. Att skriva in någon av dem i en språksektion skulle i tysthet åsidosätta gränsen du valde för hela projektet, så generatorn lämnar max_line_length enbart i [*]-blocket och behåller de siffrorna här, där du kan tillämpa dem medvetet.
Stöder din editor det?
Inbyggt stöd: VS Code, JetBrains IntelliJ-familjen, Visual Studio, Sublime Text, Xcode och Notepad++. Vim, Emacs, Neovim och några till behöver ett litet plugin. Filen är vanlig INI, så linters och formaterare kan också läsa den, och det är så Prettier och vissa språkservrar håller sig i takt med den.
Vanliga frågor
I projektroten, med root = true högst upp. Du kan lägga till fler .editorconfig-filer i underkataloger för att åsidosätta specifika sökvägar; sökningen går uppåt i trädet från filen som redigeras och stannar vid den första root = true den hittar.
Sätt fältet till 0, så utelämnar generatorn max_line_length ur filen. De dokumenterade värdena för den egenskapen är positiva tal, plus det specifikationsövergripande unset, som finns för att upphäva ett värde som ärvts från en överordnad fil. Det här är filen på översta nivån, så det finns ingenting att upphäva och en utelämnad rad säger samma sak. Det du inte ska skriva är max_line_length = 0, vilket det här verktyget tidigare gjorde: specifikationen säger åt plugin-modulerna att ignorera värden de inte stöder, så en gräns på noll är ingen gräns på noll, det är en rad som i tysthet inte gör någonting.
Nej. EditorConfig täcker blanksteg och radslut i varje editor, även de dina kollegor använder men inte du. Prettier och språkspecifika linters hanterar djupare stilregler som citattecken, semikolon och avslutande kommatecken. De två kompletterar varandra, och Prettier läser din .editorconfig för grunderna.
Därför att YAML inte tillåter tabbtecknet för indrag över huvud taget. En workflow- eller compose-fil som har indrag med tabbar går inte att tolka innan något verktyg ens hinner läsa den. Generatorn behåller dina tabbar överallt annars och åsidosätter bara YAML-sektionen, och den säger till ovanför filen när den gör det.
Sätt end_of_line = crlf om Windows-verktyg i repot verkligen kräver det. Det bättre alternativet är oftast lf här plus en .gitattributes med * text=auto, så att git normaliserar vid commit medan utcheckningarna förblir lämpliga för varje operativsystem.
Dina val bygger filen och följer med i sidans länk mellan stegen, så att du kan dela eller bokmärka en konfiguration. Ingenting lagras på våra servrar efter att sidan har genererats.
Relaterade verktyg
ASCII-tabellreferens
Full ASCII-tabell från 0 till 127 med decimal-, hex-, oktal- och binärvärden samt notation för numeriska HTML-referenser, inklusive NUL, LF och DEL.
CSS-pilgnerator
Skapa lokalt en CSS-pil med riktning, färg, storlek och ramens tjocklek och kopiera sedan regeln.
HTML-teckenreferens
En sökbar lista över HTML-entiteter med deras namngivna och numeriska koder samt kopiering med ett klick för specialtecken och symboler.
Generator för platshållarbilder
Skapa en bild på 1–4000 px med egna färger och text, ladda ned PNG eller kopiera webbadress och HTML.
Oktal-till-decimal-omvandlare
Omvandla oktala tal (bas 8) till decimalvärden, med den fullständiga positionsformeln och en steg-för-steg-uppdelning.
Markdown-förhandsvisare
Skriv Markdown och se den renderade HTML:en uppdateras live. GitHub-flavored syntax med tabeller, uppgiftslistor, inramad kod och autolänkar.
Verktyget finns på andra språk
- Generador de EditorConfig [ES]
- Trình tạo EditorConfig [VI]
- مولد EditorConfig [AR]
- Générateur EditorConfig [FR]
- EditorConfig ジェネレーター [JA]
- EditorConfig 생성기 [KO]
- Gerador de EditorConfig [PT]
- EditorConfig-Generator [DE]
- Generator EditorConfig [ID]
- EditorConfig-generator [NL]
- เครื่องมือสร้าง EditorConfig [TH]
- Generator EditorConfig [PL]
- EditorConfig Generator [EN]
- Generatore EditorConfig [IT]
- Генератор EditorConfig [RU]
- EditorConfig Oluşturucu [TR]
- EditorConfig 生成器 [ZH]