मैं 51-100
जैसे टेक्स्ट का एक दृश्यमान रूप से चयनित ब्लॉक लेना चाहता हूं, और इसे 51,52,53,...,99,100
में विस्तारित करना है।मैं एक श्रेणी को विस्क्रिप्ट में एक सूची में कैसे विस्तारित करूं?
क्या विस्क्रिप्ट में ऐसा करने का कोई आसान तरीका है?
मैं 51-100
जैसे टेक्स्ट का एक दृश्यमान रूप से चयनित ब्लॉक लेना चाहता हूं, और इसे 51,52,53,...,99,100
में विस्तारित करना है।मैं एक श्रेणी को विस्क्रिप्ट में एक सूची में कैसे विस्तारित करूं?
क्या विस्क्रिप्ट में ऐसा करने का कोई आसान तरीका है?
मुझे निम्नलिखित कार्यान्वयन का प्रस्ताव दें।
vnoremap <silent> <leader># :<c-u>call ExpandRange()<cr>
function! ExpandRange()
norm! gvy
let n = matchlist(@", '\(\d\+\)\s*-\s*\(\d\+\)')[1:2]
if len(n) != 2 || +n[0] > +n[1]
return
end
exe 'norm! gvc' . join(range(n[0], n[1]), ',')
endfunction
यह सीमा अंकन संख्या के आसपास कोई खाली स्थान के है कि वहाँ की गारंटी है, तो ExpandRange()
के दूसरे बयान, split()
फ़ंक्शन का उपयोग करके सरल किया जा सकता
let n = split(@", '-')
ध्यान दें कि पाठ एक श्रेणी को इंगित करना अनाम नाम में डाल दिया जाता है। यदि यह रजिस्टर को छूने के लिए बेहतर है, ExpandRange()
को को पहले से ही सहेजने के लिए संशोधित करें और इसे बाद में पुनर्स्थापित करें।
function! ExpandRange()
let [qr, qt] = [getreg('"'), getregtype('"')]
norm! gvy
let n = matchlist(@", '\(\d\+\)\s*-\s*\(\d\+\)')[1:2]
call setreg('"', qr, qt)
if len(n) != 2 || +n[0] > +n[1]
return
end
exe 'norm! gv"_c' . join(range(n[0], n[1]), ',')
endfunction