Giải pháp mới
Bạn có thể xem những thay đổi cuối cùng của bạn với :changes
lệnh. Vì vậy, bạn có thể thay đổi dòng thay đổi gần đây nhất của mình bằng biểu thức chính quy và sau đó áp dụng dòng này matchadd()
theo đề xuất của @joeytwiddle.
Đây là mã:
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
Lưu ý :
Chức năng này chỉ thêm một điểm nổi bật mới mà không xóa cái cũ, vì vậy trước tiên bạn phải xóa cái cũ. Với clearmatches
chức năng bạn có thể loại bỏ các trận đấu trước khi thêm một trận đấu mới. Cẩn thận, nó sẽ loại bỏ TẤT CẢ các trận đấu. Nếu bạn muốn chi tiết hơn, bạn có thể lưu trận đấu của mình và xóa nó bằng tay:
ví dụ
function! DiffWithPrevious()
call matchdelete(m)
...
let m = matchadd('TemporalDiff', '\%'.line.'l')
endfunction
- Sau một số thử nghiệm, tôi phát hiện ra nó chỉ hoạt động để thay đổi một dòng.
Người giới thiệu :
Giải pháp cũ
Đây là một giải pháp khả thi, chủ yếu lấy cảm hứng từ bộ đệm Diff hiện tại và tệp gốc :
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
Ý tưởng là để khuếch tán tệp với tệp trên hệ thống, vì vậy bạn hoàn tác thay đổi cuối cùng của mình, viết nó, làm lại thay đổi las và thực hiện tìm khác biệt.
Tôi nghĩ rằng điều này sẽ làm công việc cho hình ảnh khác biệt theo thời gian theo thời gian.
matchadd()
, nhưng khó hơn một chút là tìm ra phần nào của tệp đã thay đổi.