Nueva solución
Puede ver sus últimos cambios con el :changes
comando. Por lo tanto, puede realizar su cambio de línea más reciente con una expresión regular y luego aplicar la línea matchadd()
según lo sugerido por @joeytwiddle.
Aquí está el código:
function! DiffWithPrevious()
call clearmatches()
redir => message
silent changes
redir END
let line = matchstr(message, '\v\n\s{4}1[^0-9]*\zs\d+\ze')
highlight TemporalDiff ctermbg=green guibg=green
let m = matchadd('TemporalDiff', '\%'.line.'l')
endfunction
Nota :
Esta función solo agrega un nuevo resaltado sin eliminar el anterior, por lo que primero deberá eliminar el anterior. Con la clearmatches
función puede eliminar las coincidencias antes de agregar una nueva. Cuidado, eliminará TODAS las coincidencias. Si desea más granularidad, puede guardar su coincidencia y eliminarla manualmente:
p.ej
function! DiffWithPrevious()
call matchdelete(m)
...
let m = matchadd('TemporalDiff', '\%'.line.'l')
endfunction
- Después de algunas pruebas, descubrí que solo funciona para el cambio de una línea.
Referencias
Vieja solución
Aquí hay una posible solución, inspirada principalmente en el búfer actual Diff y el archivo original :
function! DiffWithPrevious()
undo
write
redo
let filetype=&ft
diffthis
vnew | r # | normal! 1Gdd
diffthis
exe "setlocal bt=nofile bh=wipe nobl noswf ro ft=" . filetype
endfunction
La idea es diferenciar el archivo con el archivo en el sistema, para que pueda deshacer su último cambio, escribirlo, rehacer el último cambio y ejecutar el diferencial.
Creo que esto debería hacer el trabajo para las visualizaciones temporales temporales.
matchadd()
, pero un poco más complicado es determinar qué partes del archivo han cambiado.