Yeni çözüm
Son değişikliklerinizi :changes
komutla görüntüleyebilirsiniz. Böylece en son satır değişikliğinizi düzenli bir matchadd()
ifadeyle düzeltebilir ve ardından satırı @joeytwiddle tarafından önerilen şekilde uygulayabilirsiniz.
İşte kod:
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
Not :
Bu işlev yalnızca eskisini kaldırmadan yeni bir vurgu ekler, bu yüzden önce eskisini kaldırmanız gerekir. İle clearmatches
işlevin Yenisini eklemeden önce eşleşmeleri kaldırabilirsiniz. Dikkatli olun, TÜM eşleşmeleri kaldıracaktır . Daha fazla ayrıntı istiyorsanız, eşleşmenizi kaydedebilir ve manuel olarak kaldırabilirsiniz:
Örneğin
function! DiffWithPrevious()
call matchdelete(m)
...
let m = matchadd('TemporalDiff', '\%'.line.'l')
endfunction
- Bazı testlerden sonra, sadece bir satırlık değişim için işe yaradığını öğrendim.
Referanslar :
Eski çözüm
İşte esas olarak Diff akım tamponundan ve orijinal dosyadan ilham alan olası bir çözüm :
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
Fikir dosyayı sistemdeki dosya ile dağıtmak, böylece son değişikliği geri almak, yazmak, las değişikliği yeniden ve diff yürütmek.
Bunun zaman zaman zamansal fark görselleştirmeleri için yapılması gerektiğini düşünüyorum.
matchadd()
, ancak dosyanın hangi bölümlerinin değiştiğini biraz daha zorlaştırır.