नया समाधान
आप :changes
कमांड के साथ अपने अंतिम बदलाव देख सकते हैं । तो आप एक regex के साथ अपनी सबसे हालिया रेखा को बदल सकते हैं और फिर matchadd()
@joeytwiddle द्वारा सुझाई गई रेखा को लागू कर सकते हैं ।
यहाँ कोड है:
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
नोट :
यह फ़ंक्शन केवल पुराने को हटाए बिना एक नया हाइलाइट जोड़ता है, इसलिए आपको पहले पुराने को हटाना होगा। clearmatches
फ़ंक्शन के साथ आप एक नया जोड़ने से पहले मैचों को हटा सकते हैं। सावधान, यह सभी मैचों को हटा देगा । यदि आप अधिक ग्रैन्युलैरिटी चाहते हैं, तो आप अपना मैच बचा सकते हैं और इसे मैन्युअल रूप से निकाल सकते हैं:
जैसे
function! DiffWithPrevious()
call matchdelete(m)
...
let m = matchadd('TemporalDiff', '\%'.line.'l')
endfunction
- कुछ परीक्षणों के बाद, मुझे पता चला कि यह केवल एक-लाइन परिवर्तन के लिए काम करता है।
संदर्भ:
पुराना हल
यहाँ एक संभावित समाधान है, मुख्य रूप से डिफ करंट बफर और मूल फ़ाइल से प्रेरित है :
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
सिस्टम पर फ़ाइल के साथ फ़ाइल को अलग करना विचार है, इसलिए आप अपने अंतिम परिवर्तन को पूर्ववत करें, इसे लिखें, लास परिवर्तन को फिर से करें और अंतर को निष्पादित करें।
मुझे लगता है कि यह समय-समय पर अस्थायी रूप से भिन्न दृश्य के लिए काम करना चाहिए।
matchadd()
, लेकिन थोड़ा और मुश्किल काम कर रहा है जो फ़ाइल के कुछ हिस्सों को बदल दिया है।