Edición en modo diff en vivo en vim

Edición en modo diff en vivo en vim

Quiero una vista en vivo de las diferencias mientras edito un archivo. vimdiffEs capaz de hacer algo que quiero, como resaltar las diferencias entre dos archivos.

Sin embargo, hay dos inconvenientes vimdiffque me frenan.

En primer lugar, no puede almacenar en buffer el mismo archivo de forma independiente para permitir una diffcomparación. Este problema se puede solucionar fácilmente. Tengo el siguiente script de shell (llámelo diffvim) para hacer que vimdiffel mismo archivo en el buffer sea independiente (haciendo una copia temporal del archivo que se está editando).

#!/bin/sh

# Differentially Viming

TMPDIR=/tmp/diffvim
FILENM=$1
FILEBN=$(basename $FILENM)

if [ ! -d "$TMPDIR" ]; then
  mkdir $TMPDIR
fi

cp $FILENM $TMPDIR/$FILEBN && vimdiff $FILENM $TMPDIR/$FILEBN

El segundo inconveniente vimdiffes que editar elno diferenciadopartes de una de las dos copias del mismo archivo no activan diffel recálculo de las diferencias. Hay que hacerlo manualmente invocando :diffupdate. Quiero que este recálculo se automatice. La forma relativamente conveniente que siento es activarlo cuando salgo delINSERTARmodo y entrar en elNORMALmodo. Nuevamente, esto se puede hacer fácilmente agregando la siguiente asignación a mi .vimrcarchivo:

inoremap <Esc> <Esc>:diffu<CR>

Sin embargo, todavía no es la solución perfecta. Porque si hago algunas ediciones en elNORMALmodo, es decir, sin entrar y luego salir delINSERTARmodo, el recálculo aún no se activará automáticamente después de realizar la edición. Entonces agrego otra asignación a mi .vimrcarchivo:

nnoremap <Esc> :diffu<CR>

Pero esta vez sucede algo extraño. Cuando abro un archivo para editarlo, algunas de las combinaciones de teclas estándar no funcionan correctamente. Por ejemplo, si presiono la tecla ho l(es decir, cualquiera de ellas es el primer comando que emito después de abrir el archivo), todas me llevan aINSERTARmodo, mientras teclea jo Gelimina una línea o todo el contenido, etc. Pero si después de abrir el archivo, presiono la tecla Escprimero, esos comandos funcionan bien.

¿Alguna idea de qué sale mal? ¿Tiene alguna solución alternativa?

Respuesta1

Después de investigar autocmden vimdoc, creo que encontré la solución que hace exactamente lo que quiero:

autocmd CursorMoved,CursorMovedI * diffupdate

¡Muchas gracias a Ingo por su sugerencia!

Respuesta2

<Esc>También se utiliza en varios códigos clave de claves especiales y desempeña un papel en la impresión en el terminal.

Es mala idea sobrecargarlo, especialmente con algo tan invasivo como lo hiciste tú. Utilice una clave diferente, por ejemplo <Leader><Leader>, o defina un activador de eventos:

:autocmd InsertEnter,InsertLeave * diffupdate

información relacionada