Bu oldukça iyi çalışıyor gibi görünüyor ve <C-a>
bir 9 (95 105 olur) veya <C-x>
0 (105 95 olur) kullanırken bir şeyleri aklı başında tutar :
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
- İlk olarak, herhangi bir rakamı ararız,
search()
sıfırlamama avantajına sahiptir @/
.
a <Esc>h
- Ekleme moduna gidin, rakamdan sonra bir boşluk ekleyin ve imleç rakamın üstünde olacak şekilde sola gidin.
- Şimdi
<C-a>
veya kullanabiliriz <C-x>
.
lxh
Eklediğimiz alanı kaldırmak için kullanıyoruz .
Ben bu eşlediyseniz g<C-a>
ve g<C-x>
hala orijinal arayabilecekleri.
Yalnızca geçerli satırdaki sayıları arayacak (ancak geçerli satırda sayı yoksa sarkan bir alan bırakacak) biraz farklı bir sürüm:
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
Ve işte önceki ile aynı kavramı kullanan ancak rakamdan önce boşluk ekleyen başka bir sürüm . Bu, g<C-a>
sayıdan önceki herhangi bir munis işaretini yoksayacaktır (varsayılan olarak, <C-a>
açık olarak -42
'artıracaktır') -41
.
Ayrıca bir sayıyı kabul eder, böylece 5g<C-a>
sayıyı 5 arttırır:
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 ekleyebilir veyar2
1'i 2 ile değiştirebilirsiniz.