Solusi baru
Anda dapat melihat perubahan terakhir dengan :changes
perintah. Jadi Anda bisa melihat perubahan baris terbaru Anda dengan regex dan kemudian menerapkan garis matchadd()
seperti yang disarankan oleh @joeytwiddle.
Ini kodenya:
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
Catatan :
Fungsi ini hanya menambahkan sorotan baru tanpa menghapus yang lama, jadi Anda harus menghapus yang lama terlebih dahulu. Dengan clearmatches
fungsi ini Anda dapat menghapus kecocokan sebelum menambahkan yang baru. Hati-hati, ini akan menghapus SEMUA pertandingan. Jika Anda ingin lebih terperinci, Anda dapat menyimpan pertandingan dan menghapusnya secara manual:
misalnya
function! DiffWithPrevious()
call matchdelete(m)
...
let m = matchadd('TemporalDiff', '\%'.line.'l')
endfunction
- Setelah beberapa tes, saya menemukan itu hanya berfungsi untuk perubahan satu baris.
Referensi :
Solusi lama
Berikut adalah solusi yang mungkin, terutama terinspirasi oleh penyangga Diff saat ini dan file asli :
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
Idenya adalah untuk diff file dengan file pada sistem, sehingga Anda membatalkan perubahan terakhir Anda, tulis itu, ulangi perubahan las dan jalankan diff.
Saya pikir ini harus melakukan pekerjaan untuk visualisasi temporal diff waktu-ke-waktu.
matchadd()
, tetapi sedikit lebih rumit menentukan bagian file mana yang telah berubah.