Nova solução
Você pode ver suas últimas alterações com o :changes
comando Para que você possa alterar sua linha mais recente com uma regex e aplicá-la matchadd()
conforme sugerido por @joeytwiddle.
Aqui está o 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 :
Essa função adiciona apenas um novo destaque sem remover o antigo, portanto, você deve remover o antigo primeiro. Com a clearmatches
função, você pode remover as correspondências antes de adicionar uma nova. Cuidado, ele removerá TODAS as correspondências. Se você quiser mais granularidade, salve sua correspondência e remova-a manualmente:
por exemplo
function! DiffWithPrevious()
call matchdelete(m)
...
let m = matchadd('TemporalDiff', '\%'.line.'l')
endfunction
- Após alguns testes, descobri que só funciona para alterações em uma linha.
Referências :
Solução antiga
Aqui está uma solução possível, inspirada principalmente no buffer de corrente Diff e no arquivo 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
A idéia é diferenciar o arquivo com o arquivo no sistema, para que você desfaça sua última alteração, escreva-a, refaça a última alteração e execute a diferença.
Eu acho que isso deve funcionar para visualizações de diferenças temporais de tempos em tempos.
matchadd()
, mas um pouco mais complicado é descobrir quais partes do arquivo foram alteradas.