EditorConfig Guide
Source index and context
EditorConfig provides consistent coding styles across editors and IDEs. Create a
.editorconfig file in your project root.
Standard Configuration
# EditorConfig - https://editorconfig.org
root = true
# Default for all files
[*]
charset = utf-8
end_of_line = lf
insert_final_newline = true
trim_trailing_whitespace = true
indent_style = space
# Python
[*.py]
indent_size = 4
max_line_length = 100
# Ruby
[*.rb]
indent_size = 2
max_line_length = 100
# Go (tabs required)
[*.go]
indent_style = tab
indent_size = 4
# Rust
[*.rs]
indent_size = 4
max_line_length = 100
# C#
[*.cs]
indent_size = 4
max_line_length = 100
# JavaScript/TypeScript
[*.{js,jsx,ts,tsx}]
indent_size = 2
max_line_length = 100
# Web (HTML, CSS)
[*.{html,css,scss,less}]
indent_size = 2
# Data formats
[*.{json,yaml,yml,toml}]
indent_size = 2
# Markdown
[*.md]
indent_size = 4
max_line_length = 80
trim_trailing_whitespace = false
# Shell scripts
[*.sh]
indent_size = 2
max_line_length = 80
# SQL
[*.sql]
indent_size = 2
max_line_length = 80
# Makefiles (tabs required)
[Makefile]
indent_style = tab
# Dockerfiles
[Dockerfile*]
indent_size = 4
# Git config
[.git*]
indent_size = 4
Properties Reference
| Property | Values | Description |
|---|---|---|
root | true | Stop searching for .editorconfig |
indent_style | tab, space | Hard tabs or soft tabs |
indent_size | integer | Number of spaces per indent |
tab_width | integer | Width of a tab character |
end_of_line | lf, cr, crlf | Line ending style |
charset | utf-8, latin1, etc. | Character encoding |
trim_trailing_whitespace | true, false | Remove trailing spaces |
insert_final_newline | true, false | File ends with newline |
max_line_length | integer, off | Soft line length limit |
Editor Support
EditorConfig is supported natively or via plugins:
| Editor | Support |
|---|---|
| VS Code | Native (settings enable) |
| JetBrains IDEs | Native |
| Vim/Neovim | Plugin: editorconfig-vim |
| Emacs | Plugin: editorconfig-emacs |
| Sublime Text | Plugin: EditorConfig |
| Atom | Plugin: editorconfig |
VS Code Settings
Add to .vscode/settings.json:
{
"editor.formatOnSave": true,
"files.trimTrailingWhitespace": true,
"files.insertFinalNewline": true,
"files.eol": "\n"
}
Relationship with Other Tools
EditorConfig works alongside language-specific formatters:
| Tool | Purpose | EditorConfig Relationship |
|---|---|---|
| Prettier | Formatting | Respects .editorconfig |
| Ruff | Python formatting | Has own config, sync manually |
| rustfmt | Rust formatting | Has own config, sync manually |
| gofmt | Go formatting | Hardcoded (tabs), no config |
| dotnet format | C# formatting | Respects .editorconfig |
Syncing with Formatters
Keep EditorConfig and formatter configs in sync:
# pyproject.toml (Ruff)
[tool.ruff]
line-length = 100 # Match .editorconfig max_line_length
[tool.ruff.format]
indent-style = "space" # Match .editorconfig indent_style
Best Practices
-
Always set
root = truein project root to prevent inheriting from parent directories. -
Use LF line endings (
end_of_line = lf) for consistency across platforms. Handle Windows in.gitattributes. -
Always insert final newline - POSIX standard, prevents diff noise.
-
Trim trailing whitespace - except in Markdown where trailing spaces can mean line breaks.
-
Match formatter configs - EditorConfig sets editor behavior, but formatters enforce on save/commit.