Dies scheint recht gut zu funktionieren und macht ziemlich vernünftige Dinge, wenn Sie <C-a>
eine 9 verwenden (95 wird 105) oder wenn Sie <C-x>
eine 0 verwenden (105 wird 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
- Zunächst suchen wir nach einer beliebigen Ziffer,
search()
die den Vorteil hat, dass sie nicht zurückgesetzt wird @/
.
a <Esc>h
- Wechseln Sie in den Einfügemodus, fügen Sie nach der Ziffer ein Leerzeichen ein und gehen Sie nach links, sodass sich der Cursor über der Ziffer befindet.
- Wir können jetzt
<C-a>
oder verwenden <C-x>
.
- Wir verwenden
lxh
, um den hinzugefügten Speicherplatz zu entfernen.
Ich habe dies auf g<C-a>
und abgebildet g<C-x>
, sodass Sie das Original weiterhin aufrufen können.
Eine etwas andere Version, die nur nach Zahlen in der aktuellen Zeile sucht (aber ein baumelndes Leerzeichen lässt, wenn in der aktuellen Zeile keine Nummer vorhanden ist):
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
Und hier ist eine andere Version, die das gleiche Konzept wie zuvor verwendet, aber auch ein Leerzeichen vor der Ziffer hinzufügt . Dadurch wird g<C-a>
jedes munis Zeichen vor der Nummer ignorieren (standardmäßig <C-a>
auf -42
Willen ‚increment‘ es -41
.
Es akzeptiert auch eine Zählung, so dass 5g<C-a>
die Zahl um 5 erhöht wird:
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 hinzufügen oderr2
die 1 durch eine 2 ersetzen.