guide/whitespace-options.md

Diferencias entre las opciones para ignorar espacios — diff -b, -w, -B, -Z y sus equivalentes en git

Comparamos con ejemplos y con las opciones de GNU diff y git la diferencia exacta entre ignorar espacios al final de línea, ignorar la cantidad de espacios (-b), ignorar todos los espacios (-w), ignorar líneas en blanco (-B) e ignorar mayúsculas.

Última actualización: 2026-09-23

Muchas veces, cuando dos archivos «tienen el mismo contenido» pero diff muestra montones de diferencias, la culpa es de los espacios: el editor borró los espacios al final de línea, convirtió tabuladores en espacios o cambió el ancho de la sangría. Las herramientas diff ofrecen opciones para ignorar estas diferencias, pero cada una ignora un alcance distinto, así que conviene saber exactamente qué hace cada una.

Opciones de GNU diff relacionadas con los espacios

OpciónNombre largoQué ignora
-Z--ignore-trailing-spaceLos espacios al final de línea
-E--ignore-tab-expansionLas diferencias debidas a expandir tabuladores en espacios
-b--ignore-space-changeLos cambios en la cantidad de espacios y los espacios al final de línea
-w--ignore-all-spaceTodos los espacios
-B--ignore-blank-linesLos cambios que solo añaden o eliminan líneas en blanco
-i--ignore-caseLas mayúsculas y minúsculas
--strip-trailing-crEl carácter CR al final de las líneas de entrada

Opciones equivalentes de git diff

La documentación de git las describe así:

La diferencia clave entre -b y -w

Es habitual confundir estas dos opciones. Lo esencial es si distinguen entre que haya o no haya espacio.

IzquierdaDerecha-b (ignorar cantidad de espacios)-w (ignorar todos los espacios)
a ba bIgualesIguales
a babDistintasIguales
x = 1x=1DistintasIguales
if (a) + espacio al finalif (a)IgualesIguales
Sangría con 1 tabuladorSangría con 4 espaciosIgualesIguales

-b reduce cada grupo de espacios a uno solo; -w elimina todos los espacios antes de comparar. Por eso -w considera iguales x = 1 y x=1, e incluso int a e inta.

El riesgo cuando la sangría tiene significado

En archivos donde la sangría forma parte de la sintaxis, como Python, YAML o Makefile, las opciones para ignorar espacios pueden ocultar cambios reales.

if ready:
    start()
    notify()
if ready:
    start()
notify()

En el segundo, notify() ha salido del bloque if y el comportamiento cambia, pero si comparas con -w se eliminan todos los espacios y la diferencia desaparece. -b sí la detecta, porque el espacio al principio de la línea pasa de «existir» a «no existir». Sin embargo, si la sangría pasa de 4 a 8 espacios y el código entra en un bloque más interno, solo ha cambiado la cantidad de espacios, así que -b tampoco lo muestra.

Lo seguro es comparar sin opciones de espacios los archivos en los que la sangría importa. Usa las opciones de espacios para comprobar «si un cambio es solo de formato», y acostúmbrate a hacer la revisión final sin ellas.

Alcance de ignorar líneas en blanco (-B)

-B y la opción --ignore-blank-lines de git ocultan los cambios formados solo por líneas en blanco. Si una línea en blanco añadida está en el mismo hunk que otro cambio real, puede seguir mostrándose. Resulta útil en documentos en los que se cambió el número de líneas en blanco entre párrafos, o cuando un formateador de código ajustó las líneas en blanco entre funciones.

Equivalencias con las opciones de este sitio

Este sitioGNU diff más cercanogit diff más cercano
Espacios: comparar tal cual(sin opción)(sin opción)
Espacios: ignorar espacios al final de línea-Z--ignore-space-at-eol
Espacios: ignorar cantidad de espacios-b-b
Espacios: ignorar todos los espacios-w-w
Ignorar mayúsculas-i(no aplica)
Ignorar líneas en blancoSimilar a -B (excluye las líneas en blanco de la comparación)Similar a --ignore-blank-lines
Normalizar fin de línea--strip-trailing-cr + ignorar el salto de línea finalSimilar a --ignore-cr-at-eol

La opción «Ignorar líneas en blanco» de este sitio saca por completo las líneas en blanco de la comparación y solo las muestra atenuadas. Además, las opciones de ignorar también se aplican al resaltado dentro de la línea: con «ignorar cantidad de espacios» activada, no se resaltan las partes que solo difieren en el número de espacios.

Pruébalo en esta herramienta

Introduce los ejemplos de la tabla en el comparador de textos y cambia las opciones de espacios una a una: verás la diferencia al momento. Las «diferencias invisibles», como el CR al final de línea o el salto de línea al final del archivo, se tratan en Caracteres de fin de línea y diferencias invisibles, y cómo leer el resultado como patch, en Cómo leer un diff unificado.

Ir al comparador de textos