EditorConfig y configuración de VS Code
Asegura un comportamiento consistente del editor en tu equipo con EditorConfig, configuración del espacio de trabajo de VS Code y extensiones recomendadas.
Receta
Tarjeta de referencia rápida — lista para copiar y pegar.
# Crea los tres archivos de configuración
touch .editorconfig
mkdir -p .vscode
touch .vscode/settings.json
touch .vscode/extensions.jsonCuándo usarlo: Cualquier proyecto con múltiples contribuyentes, especialmente cuando los miembros del equipo usan diferentes editores o configuraciones de VS Code.
Ejemplo de Trabajo
# .editorconfig
root = true
[*]
charset = utf-8
end_of_line = lf
indent_style = space
indent_size = 2
insert_final_newline = true
trim_trailing_whitespace = true
[*.md]
trim_trailing_whitespace = false
[Makefile]
indent_style = tab// .vscode/settings.json
{
// Formateo
"editor.defaultFormatter": "esbenp.prettier-vscode",
"editor.formatOnSave": true,
"editor.tabSize": 2,
"editor.insertSpaces": true,
// Formateadores específicos del idioma
"[typescript]": {
"editor.defaultFormatter": "esbenp.prettier-vscode"
},
"[typescriptreact]": {
"editor.defaultFormatter": "esbenp.prettier-vscode"
},
"[json]": {
"editor.defaultFormatter": "esbenp.prettier-vscode"
},
"[css]": {
"editor.defaultFormatter": "esbenp.prettier-vscode"
},
// ESLint
"eslint.validate": [
"javascript",
"javascriptreact",
"typescript",
"typescriptreact"
],
"editor.codeActionsOnSave": {
"source.fixAll.eslint": "explicit"
},
// Archivos
"files.eol": "\n",
"files.trimTrailingWhitespace": true,
"files.insertFinalNewline": true,
"files.exclude": {
"**/.next": true,
"**/node_modules": true,
"**/out": true
},
// TypeScript
"typescript.preferences.importModuleSpecifier": "non-relative",
"typescript.suggest.autoImports": true,
"typescript.tsdk": "node_modules/typescript/lib"
}// .vscode/extensions.json
{
"recommendations": [
"esbenp.prettier-vscode",
"dbaeumer.vscode-eslint",
"bradlc.vscode-tailwindcss",
"formulahendry.auto-rename-tag",
"yoavbls.pretty-ts-errors",
"streetsidesoftware.code-spell-checker"
]
}Lo que esto demuestra:
.editorconfigasegura que la configuración básica del editor (indentación, finales de línea) funcione en todos los editores.vscode/settings.jsonconfigura formateo al guardar, integración con ESLint y preferencias de TypeScript.vscode/extensions.jsonsolicita a los miembros del equipo instalar extensiones recomendadas
Análisis Profundo
Cómo Funciona
- EditorConfig es un estándar compatible con la mayoría de editores (VS Code, IntelliJ, Vim, etc.) sin plugins (VS Code necesita la extensión
EditorConfig.EditorConfig) .vscode/settings.jsonen la raíz del proyecto actúa como configuración del espacio de trabajo, anulando la configuración del usuario para este proyecto.vscode/extensions.jsonactiva un mensaje de "extensiones recomendadas" cuando los miembros del equipo abren el proyecto- Formateo al guardar ejecuta el formateador configurado cada vez que guardas un archivo
source.fixAll.eslintejecuta la auto-corrección de ESLint al guardar, arreglando problemas de linting junto con el formateo
Variaciones
Para Biome en lugar de Prettier + ESLint:
// .vscode/settings.json
{
"editor.defaultFormatter": "biomejs.biome",
"editor.formatOnSave": true,
"editor.codeActionsOnSave": {
"quickfix.biome": "explicit",
"source.organizeImports.biome": "explicit"
}
}// .vscode/extensions.json
{
"recommendations": [
"biomejs.biome",
"bradlc.vscode-tailwindcss"
]
}Desabilitar formateo al guardar para lenguajes específicos:
{
"[markdown]": {
"editor.formatOnSave": false
}
}Referencia de opciones de EditorConfig:
| Opción | Valores | Qué Hace |
|---|---|---|
indent_style | space o tab | Tipo de indentación |
indent_size | número | Espacios por nivel de indentación |
end_of_line | lf o crlf | Estilo de final de línea |
charset | utf-8 | Codificación del archivo |
trim_trailing_whitespace | true o false | Elimina espacios al final al guardar |
insert_final_newline | true o false | Asegura que el archivo termine con salto de línea |
Notas de TypeScript
// Configuración de VS Code que mejoran la experiencia de desarrollo de TypeScript:
// - "typescript.preferences.importModuleSpecifier": "non-relative"
// → Usa alias de ruta (@/components) en lugar de ../../../
//
// - "typescript.suggest.autoImports": true
// → Sugerencias de auto-importación mientras escribes
//
// - "typescript.tsdk": "node_modules/typescript/lib"
// → Usa la versión de TypeScript del proyecto, no la integrada de VS CodeTrampas
Cosas que te pueden morder. Cada trampa incluye qué sale mal, por qué sucede y la solución.
-
EditorConfig vs conflictos de Prettier — EditorConfig establece
indent_size = 4pero Prettier usatabWidth: 2. Prettier gana para archivos formateados, pero nuevos archivos creados por el editor usan el valor de EditorConfig. Solución: Mantén la configuración de EditorConfig y Prettier sincronizadas. -
.vscode/ en .gitignore — Algunas plantillas agregan
.vscode/a.gitignore. Solución: Realiza commit de.vscode/settings.jsony.vscode/extensions.jsonpara consistencia del equipo. Agrega.vscode/*.code-workspacey.vscode/launch.jsona.gitignoreen su lugar (esos son personales). -
Formateo al guardar no funciona — Múltiples formateadores están instalados y VS Code no sabe cuál usar. Solución: Establece
"editor.defaultFormatter"globalmente y por idioma. VS Code te solicita elegir cuando es ambiguo. -
Arreglado ESLint en guardado entra en conflicto con formateo al guardar — Ambos se ejecutan al guardar y pueden producir cambios competidores. Solución: Usa
eslint-config-prettierpara desabilitar las reglas de formateo de ESLint, para que ESLint solo arregle problemas de calidad de código al guardar.
Alternativas
Otras formas de resolver el mismo problema — y cuándo cada una es la mejor opción.
| Alternativa | Usar Cuando | No Usar Cuando |
|---|---|---|
Solo .editorconfig | El equipo usa editores mixtos (VS Code, IntelliJ, Vim) | Quieres formateo al guardar y recomendaciones de extensiones |
Solo .vscode/settings.json | Todos usan VS Code | Los miembros del equipo usan otros editores |
devcontainers | Quieres un entorno de desarrollo completamente reproducible incluyendo extensiones | El overhead de configuración del contenedor es demasiado alto |
Preguntas Frecuentes
¿Cuál es la diferencia entre EditorConfig y Prettier?
- EditorConfig establece el comportamiento básico del editor (estilo de indentación, finales de línea, espacios en blanco finales) en todos los editores.
- Prettier es un formateador de código que re-imprime archivos completos con estilo consistente.
- EditorConfig afecta nuevas pulsaciones de tecla; Prettier reformatea código existente.
- Usa ambos y mantén su configuración sincronizada.
¿Debo realizar commit de .vscode/settings.json en el repositorio?
- Sí. La configuración del espacio de trabajo asegura comportamiento consistente del editor para el equipo.
- Realiza commit de
settings.jsonyextensions.json. - Agrega archivos personales como
launch.jsony*.code-workspacea.gitignore.
¿Qué hace source.fixAll.eslint al guardar?
- Ejecuta la auto-corrección de ESLint en cada guardado de archivo.
- Combinado con formateo al guardar, arregla tanto problemas de calidad de código como de formateo.
- Usa
eslint-config-prettierpara prevenir que los dos entren en conflicto.
Trampa: ¿Qué sucede si EditorConfig y Prettier usan diferentes tamaños de indentación?
- Prettier gana para archivos que formatea (ignora EditorConfig).
- Pero nuevos archivos creados por el editor usan el valor de EditorConfig antes de que Prettier se ejecute.
- Mantén
indent_sizeen.editorconfigetabWidthen.prettierrcidénticos.
¿Cómo deshabilito formateo al guardar para archivos markdown?
{
"[markdown]": {
"editor.formatOnSave": false
}
}¿Qué extensiones de VS Code debería recomendar para un proyecto Next.js?
esbenp.prettier-vscode-- Formateador Prettierdbaeumer.vscode-eslint-- Integración con ESLintbradlc.vscode-tailwindcss-- IntelliSense de Tailwindyoavbls.pretty-ts-errors-- Errores de TypeScript legibles
¿Cómo funciona .vscode/extensions.json?
- Cuando los miembros del equipo abren el proyecto, VS Code les solicita instalar extensiones recomendadas.
- No fuerza la instalación, solo sugiere.
- Lista extensiones por su ID de marketplace en el array
recommendations.
¿Qué hace typescript.tsdk en la configuración de VS Code?
{ "typescript.tsdk": "node_modules/typescript/lib" }- Le dice a VS Code que use la versión de TypeScript del proyecto en lugar de su versión integrada.
- Esto asegura que la verificación de tipos coincida con lo que produce
tscen CI.
Trampa: ¿Por qué entra formateo al guardar en conflicto con arreglado de ESLint al guardar?
- Ambos se ejecutan al guardar y pueden producir cambios competidores.
- Prettier formatea el archivo, luego ESLint intenta re-formatearlo diferentemente.
- Usa
eslint-config-prettierpara desabilitar las reglas de formateo de ESLint para que ESLint solo arregle problemas de calidad de código.
¿Funciona EditorConfig en editores distintos a VS Code?
- Sí. EditorConfig es compatible con IntelliJ, Vim, Sublime Text y la mayoría de editores modernos.
- VS Code requiere la extensión
EditorConfig.EditorConfig. - Esto lo hace ideal para equipos con preferencias de editor mixtas.
¿Cómo configuro preferencias de auto-importación de TypeScript en VS Code?
{
"typescript.preferences.importModuleSpecifier": "non-relative",
"typescript.suggest.autoImports": true
}"non-relative"usa alias de ruta (@/components) en lugar de../../../.autoImportshabilita sugerencias mientras escribes.
¿Cuáles son las opciones de EditorConfig más importantes?
| Opción | Recomendado |
|---|---|
indent_style | space |
indent_size | 2 |
end_of_line | lf |
insert_final_newline | true |
trim_trailing_whitespace | true |
Relacionado
- Configuración de Prettier — formateo al guardar necesita Prettier configurado
- Configuración de ESLint para Next.js — configuración de arreglado ESLint al guardar
- Integración de ESLint + Prettier — evita conflictos con formateo al guardar
- Husky & lint-staged — captura lo que formateo al guardar pierde