Mostrar espacios en blanco al final de línea en líneas eliminadas en salida de diff

Actualmente, al hacer git diff con la opción --color habilitada, git muestra terminaciones de línea como ^M y espacios en blanco al final solo en líneas adicionales. ¿Es posible hacer que Git muestre estos también en líneas eliminadas?

No es la solución más bonita, pero puede crear un alias de shell para hacerlo soportable. Lamentablemente, si mezcla tabs y espacios en la salida, no se procesa correctamente en la terminal. Esto parece ser un problema con el terminal Gnome (notará el mismo comportamiento con las líneas agregadas en el diff también).

Aquí está el command que desea:

 git diff --color | \ sed 's/^\(\x1B\[31m-.*[^ \t]\)\([ \t]\+\)\(\x1B\[m\)$/\1\x1B[41m\2\3/g' 

O más cómodamente, agregue esto a su .bashrc :

 alias coloreol="sed 's/^\(\x1B\[31m-.*[^ \t]\)\([ \t]\+\)\(\x1B\[m\)$/\1\x1B[41m\2\3/g'" 

De esta forma, puede escribir git diff --color|coloreol en el indicador del shell.

Básicamente, coincide con el código de color rojo de ANSI, un signo less seguido de cualquier elemento que no sea de espacio en blanco. A continuación, coincide con uno o más caracteres de espacio en blanco hasta que encuentra el indicador de restablecimiento ANSI. Sed insertá un código ANSI rojo-invertido entre el espacio en blanco y el final de la línea.

He desglosado el logging para usted para que pueda modificarlo según sus necesidades:

La primera parte, dividida en tres grupos:

 Match the start of the line and ANSI code for networking: ^\(\x1B\[31m -.*[^ \t] <-- Followed by the hyphen, anything, then a non-whitespace character \) Now match one or more space or tab characters for group 2. \([ \t]\+\) Finally the ANSI reset code and EOL for group 3 \(\x1B\[m\)$ 

Luego lo reemplazamos con:

  \1 \x1B[41m \2 \3 

Es decir, la primera coincidencia, el código ANSI invertido-rojo ( \x1B[41m ), seguido del espacio en blanco y el restablecimiento ANSI.

Esto no es exactamente lo que está buscando, pero si usa Vim, puede agregarlo a su file vimrc y le mostrará espacios en blanco. Luego, si usa vimdiff o usa git diff con Vim (recomiendo el complemento llamado Fugitive), mostrará el espacio en blanco.

Esto es lo que debe agregar a su vimrc:

 highlight RedundantWhitespace ctermbg=networking guibg=networking highlight ExtraWhitespace ctermbg=networking guibg=networking match RedundantWhitespace /[^\t]\zs\t\+/ match ExtraWhitespace /\s\+$\| \+\ze\t/ 

Y aquí hay algo que puede usar para eliminar automáticamente el espacio en blanco:

 autocmd BufWritePre * :%s/\s\+$//e