Được rồi, đây là cách tốt nhất tôi có thể tự tìm ra. Hàm này bắt đầu ở đầu bộ đệm hiện tại và sử dụng chuyển động ]c
nó di chuyển qua các thay đổi cho đến khi ]c
không còn có hiệu lực nữa. Nó trả về số lượng thay đổi (hoặc 0
nếu con trỏ nếu nó không phải là bộ đệm khác).
function! CountDiffs()
let winview = winsaveview()
let num_diffs = 0
if &diff
let pos = getpos(".")
keepj sil exe 'normal! G'
let lnum = 1
let moved = 1
while moved
let startl = line(".")
keepj sil exe 'normal! [c'
let moved = line(".") - startl
if moved
let num_diffs+=1
endif
endwhile
call winrestview(winview)
call setpos(".",pos)
endif
return num_diffs
endfunction
Dường như hoạt động tốt, và không phải là hiệu suất đáng chú ý khi được bao gồm trong trạng thái của tôi.
Đối với việc tìm "số" của thay đổi hiện tại, đây là hàm sử dụng chuyển động lùi [c
để đếm số lần thay đổi trước vị trí của con trỏ. Giá trị trả lại không hoàn toàn đúng ... Tôi nghĩ có lẽ nó chỉ trả về một con số nếu con trỏ "nằm trong" văn bản đã thay đổi, thay vì sau dòng đầu tiên của thay đổi.
function! CurrentDiff()
if &diff
let num_diff = 0
let winview = winsaveview()
let pos = getpos(".")
let moved = 1
while moved
let startl = line(".")
keepj sil exe 'normal! [c'
let moved = line(".") - startl
if moved
let num_diff+=1
endif
endwhile
call winrestview(winview)
call setpos(".",pos)
return num_diff
endif
endfunction
Một lần nữa, có vẻ như nó hoạt động trong trạng thái của tôi và không ảnh hưởng đến chuyển động của con trỏ. Các con số cập nhật đúng như những thay đổi được sao chép quá/từ bộ đệm.
Khi vấn đề đã được giải quyết, tôi có thể xem xét tải lên đây dưới dạng plugin trên trang web Vim.
Nguồn
2012-06-19 14:04:19
Bạn có nghĩa là số lượng * hunks * (hoặc * thay đổi * như 'vim' gọi chúng) không? –
Có, số lượng thay đổi. –