tool vim diff vimdiff

vim diff tool



¿Hay alguna manera de configurar vimdiff para ignorar TODOS los espacios en blanco? (4)

Estoy usando vim -d file1 file2 para ver las diferencias entre ellos. Esto funciona bien, pero quiero ignorar los cambios en el espacio en blanco, son irrelevantes para los archivos de código fuente.

Vim ayuda afirma que el siguiente comando hará la magia:

set diffopt+=iwhite

Pero desafortunadamente, este comando solo agrega -b a la línea de comando de la herramienta diff, y eso solo ignora los espacios en blanco al final. La tecla de línea de comando correcta para diff debe ser -w , para ignorar todos los cambios de espacio en blanco. Pero no puedo encontrar la forma de modificar la línea de comandos de diff directamente desde Vim. Por supuesto, puedo compilar un diff personalizado, o reemplazar diff con diff.sh, pero eso se ve feo :(.

¿Hay una mejor manera de modificar cómo Vim interactúa con la herramienta diff para mostrar las diferencias de archivos?


Abordar un problema planteado en los comentarios de la solución de Adam Katz:

Dependiendo de la versión vim y la configuración del usuario, un comando silent puede omitir volver a dibujar la pantalla después de que se haya emitido. También encontré este problema, que surgía cada vez que ejecutaba :diffo después de usar el diffexpr sugerido. Mi solución fue cambiar el comando de ejecución silenciosa a lo siguiente:

silent execute "!diff -a --binary " . opt . / v:fname_in . " " . v:fname_new . " > " . v:fname_out | redraw!

Esto obliga a volver a dibujar después de emitir el comando.


Esto implementa lo que quiere (tomado de los diffexpr documentos con -b cambiado a -w ):

set diffopt+=iwhite set diffexpr=DiffW() function DiffW() let opt = "" if &diffopt =~ "icase" let opt = opt . "-i " endif if &diffopt =~ "iwhite" let opt = opt . "-w " " swapped vim''s -b with -w endif silent execute "!diff -a --binary " . opt . / v:fname_in . " " . v:fname_new . " > " . v:fname_out endfunction

... Todavía estoy buscando un mejor ayudante de diffexpr con respecto al manejo de las líneas a las que ( GNU diff , incluso con -w lugar de -b , está bastante desconcertado al combinar espacios en blanco adicionales con ediciones menores como líneas comentadas). Tal vez diffchar ?


Gracias, ira, eso me ayudó. Ahora solo necesito tener esto (más simple que lo propuesto por Adam K) en mi ~ / .vimrc:

set diffopt+=iwhite set diffexpr=""

Y lo hace ... Esa sigue siendo la herramienta de diferencia más poderosa que conozco, mucho mejor que cualquier otra.


Sí. Establezca la opción iwhite como lo hizo, pero adicionalmente, haga que diffexpr vacío.

De la sección relevante de los documentos de vim :

iwhite

Ignore los cambios en la cantidad de espacio en blanco. Agrega el indicador "-b" al comando "diff" si "diffexpr" está vacío. Compruebe la documentación del comando "diff" por lo que hace exactamente. Debe ignorar la adición de espacio en blanco al final, pero no el espacio en blanco.

Tenga en cuenta también que puede proporcionar una línea de comando de diferencia personalizada configurando diffexpr . Consulte la discusión en la página man de vimdiff , en particular:

La opción ''diffexpr'' se puede configurar para utilizar algo más que el programa estándar "diff" para comparar dos archivos y encontrar las diferencias.

Cuando ''diffexpr'' está vacío, Vim usa este comando para encontrar las diferencias entre file1 y file2:

diff file1 file2 > outfile