โซลูชั่นใหม่
คุณสามารถดูการเปลี่ยนแปลงล่าสุดของคุณด้วย:changes
คำสั่ง ดังนั้นคุณสามารถ fecth การเปลี่ยนแปลงบรรทัดล่าสุดของคุณด้วย 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
แนวคิดคือการ diff ไฟล์ด้วยไฟล์บนระบบดังนั้นคุณสามารถเลิกทำการเปลี่ยนแปลงครั้งล่าสุดเขียนมันทำซ้ำการเปลี่ยนแปลง las และดำเนินการ diff
ฉันคิดว่าสิ่งนี้ควรทำงานเพื่อให้เห็นภาพชั่วขณะชั่วขณะ
matchadd()
แต่มีความยุ่งยากเล็กน้อยที่จะทำการเปลี่ยนแปลงส่วนของไฟล์