ठीक है, यहां सबसे अच्छा है कि मैं अपने साथ आ सकता हूं। यह फ़ंक्शन वर्तमान बफर के शीर्ष पर शुरू होता है और ]c
गति का उपयोग करके यह ]c
तक परिवर्तनों के माध्यम से अब तक कोई प्रभाव नहीं पड़ता है। यह परिवर्तनों की संख्या देता है (या 0
यदि कर्सर अगर यह एक diff बफर नहीं है)।
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
ऐसा लगता है कि ठीक है, और मेरी स्थिति रेखा में शामिल होने पर एक उल्लेखनीय प्रदर्शन हिट नहीं है।
वर्तमान परिवर्तन की "संख्या" ढूंढने के लिए, यहां एक ऐसा फ़ंक्शन है जो कर्सर की स्थिति से पहले परिवर्तनों की संख्या को गिनने के लिए पिछड़े [c
गति का उपयोग करता है। लौटाया गया मूल्य बिल्कुल सही नहीं है ... मुझे लगता है कि शायद यह केवल एक नंबर लौटाएगा यदि कर्सर परिवर्तन की पहली पंक्ति के बजाय बदले गए पाठ के अंदर "भीतर" है।
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
फिर से, ऐसा लगता है कि यह मेरी स्थिति रेखा में व्यवहार करता है और कर्सर के आंदोलन को प्रभावित नहीं करता है। संख्याएं ठीक से अपडेट होती हैं क्योंकि परिवर्तनों को बफर से भी कॉपी किया जाता है।
एक बार समस्याएं खत्म हो जाने के बाद मैं इसे विम वेबसाइट पर प्लगइन के रूप में अपलोड करने पर विचार कर सकता हूं।
स्रोत
2012-06-19 14:04:19
क्या आपका मतलब है * शिकारी * (या * परिवर्तन * के रूप में * vim' उन्हें कॉल करता है)? –
हां, परिवर्तनों की संख्या। –