Qué son LF y CRLF, por qué importan y cómo afectan al trabajo diario en entornos de desarrollo colaborativos y multiplataforma.
Distintos sistemas interpretan de forma diferente los saltos de línea de los archivos de texto. Hablamos de LF (\n
) y CRLF (\r\n
). Aunque no suelen ser visibles durante la edición, sus diferencias pueden afectar a la integridad del código, a los sistemas de control de versiones y a la interoperabilidad entre plataformas.
LF significa “Line Feed”, mientras que CRLF significa “Carriage Return + Line Feed”. Son secuencias de caracteres que indican el final de una línea en un archivo de texto. Su origen se remonta a los tiempos de las máquinas de escribir y los terminales físicos:
LF
(\n
, código ASCII 10): avanza una línea hacia abajo.CRLF
(\r\n
, códigos ASCII 13 y 10): vuelve al inicio de la línea y luego baja una línea.En entornos Unix (Linux, macOS, etc.), se usa LF. En sistemas Windows, por defecto se utiliza CRLF. Esta diferencia se traslada a la forma en que los editores de texto, compiladores, scripts y herramientas de automatización interpretan los archivos.
El sistema operativo no es el único factor. Al trabajar en equipo, especialmente si el equipo usa diferentes sistemas operativos, estas diferencias pueden causar conflictos en los repositorios de código. Veamos algunas situaciones habituales:
Hay varias formas de mantener consistencia sin tener que preocuparnos de los detalles cada vez que guardamos o hacemos commit.
Configuración del editor
La mayoría de los editores modernos permiten definir qué salto de línea usar. En VS Code, por ejemplo, podemos establecer "files.eol": "\n"
en el archivo de configuración del proyecto para forzar LF. También aparece en la barra inferior del editor donde se ve qué tipo de salto de línea está usando el documento abierto.
Ajustes en Git
Git proporciona la opción core.autocrlf
:
git config --global core.autocrlf true
convierte LF a CRLF al hacer checkout, y CRLF a LF al hacer commit.git config --global core.autocrlf input
convierte solo al hacer commit.
Esto reduce el riesgo de conflictos y mantiene el historial limpio.EditorConfig
Es un archivo .editorconfig
que puede vivir en el repositorio y definir reglas comunes para todos los editores compatibles. Un ejemplo:
[*]end_of_line = lfinsert_final_newline = true
Preprocesadores o linters
Herramientas como ESLint, Prettier o incluso Husky con lint-staged
pueden asegurarse de que los archivos se guarden con el salto de línea adecuado antes de hacer commit.
LF y CRLF son detalles técnicos que tienen un impacto real en el desarrollo, especialmente en proyectos colaborativos que pueden afectarr a la estabilidad de los entornos y al control de versiones.
Adoptar una convención clara, documentarla y apoyarse en herramientas que la hagan cumplir automáticamente es una forma sencilla de evitar errores innecesarios y mejorar la calidad del proyecto. Si trabajamos en equipos distribuidos o multiplataforma, conviene elegir un único estilo (preferiblemente LF por su compatibilidad) y asegurarnos de que todos los miembros del equipo y herramientas lo respetan.