यह काफी अच्छी तरह से काम करने लगता है, और <C-a>
9 (95 पर 105) हो जाता है, या <C-x>
0 (105 हो जाता है 95) का उपयोग करते समय काफी समझदार बातें करता है :
nnoremap g<C-a> :call search('\d', 'c')<CR>a <Esc>h<C-a>lxh
nnoremap g<C-x> :call search('\d', 'c')<CR>a <Esc>h<C-x>lxh
- सबसे पहले, हम किसी भी अंक की खोज करते हैं,
search()
रीसेट न करने का लाभ है @/
।
a <Esc>h
- इन्सर्ट मोड में जाएं, डिजिट के बाद स्पेस डालें और बाईं ओर जाएं ताकि कर्सर डिजिट के ऊपर हो।
- हम अब उपयोग कर सकते हैं
<C-a>
या <C-x>
।
- हम अपने द्वारा
lxh
जोड़े गए स्थान को हटाने के लिए उपयोग करते हैं ।
मैंने इसे मैप किया है g<C-a>
और g<C-x>
इसलिए, आप अभी भी मूल कॉल कर सकते हैं।
थोड़ा अलग संस्करण जो केवल वर्तमान लाइन पर संख्याओं की खोज करेगा (लेकिन यदि वर्तमान रेखा पर कोई संख्या नहीं है तो झूलने वाला स्थान छोड़ देगा):
nnoremap g<C-a> :call search('\d', 'c', line('.'))<CR>a <Esc>h<C-a>lxh
nnoremap g<C-x> :call search('\d', 'c', line('.'))<CR>a <Esc>h<C-x>lxh
और यहां एक और संस्करण है जो पहले की तरह ही अवधारणा का उपयोग करता है, लेकिन अंक से पहले एक स्थान भी जोड़ता है । यह g<C-a>
संख्या से पहले किसी भी मौन संकेत को अनदेखा कर देगा (डिफ़ॉल्ट रूप से, उस <C-a>
पर -42
'वेतन वृद्धि' करेगा -41
।
यह एक गिनती भी स्वीकार करता है, जिससे 5g<C-a>
संख्या 5 से बढ़ जाएगी:
fun! Increment(dir, count)
" No number on the current line
if !search('\d', 'c', getline('.'))
return
endif
" Store cursor position
let l:save_pos = getpos('.')
" Add spaces around the number
s/\%#\d/ \0 /
call setpos('.', l:save_pos)
normal! l
" Increment or decrement the number
if a:dir == 'prev'
execute "normal! " . repeat("\<C-x>"), a:count
else
execute "normal! " . repeat("\<C-a>", a:count)
endif
" Remove the spaces
s/\v (\d{-})%#(\d) /\1\2/
" Restore cursor position
call setpos('.', l:save_pos)
endfun
nnoremap <silent> g<C-a> :<C-u>call Increment('next', v:count1)<CR>
nnoremap <silent> g<C-x> :<C-u>call Increment('prev', v:count1)<CR>
10<C-a>
10 को जोड़ने के लिए याr2
1 को 2 के साथ बदलने के लिए भी कर सकते हैं