Cela semble fonctionner assez bien et fait des choses assez sensées lors de l'utilisation <C-a>
sur un 9 (95 devient 105), ou <C-x>
sur un 0 (105 devient 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
- Tout d'abord, nous recherchons n'importe quel chiffre,
search()
a l'avantage de ne pas réinitialiser @/
.
a <Esc>h
- Passez en mode insertion, ajoutez un espace après le chiffre et allez à gauche pour que le curseur soit au-dessus du chiffre.
- Nous pouvons maintenant utiliser
<C-a>
ou <C-x>
.
- Nous utilisons
lxh
pour supprimer l'espace que nous avons ajouté.
J'ai mappé cela à g<C-a>
et g<C-x>
, vous pouvez donc toujours appeler l'original.
Une version légèrement différente qui ne recherchera que les numéros sur la ligne actuelle (mais laissera un espace pendant s'il n'y a pas de numéro sur la ligne actuelle):
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
Et voici une autre version qui utilise le même concept que précédemment, mais ajoute également un espace avant le chiffre. Cela fera g<C-a>
ignorer tout signe avant le numéro Mounis (par défaut, <C-a>
sur la -42
volonté « increment » à -41
.
Il accepte également un nombre, ce qui 5g<C-a>
augmentera le nombre de 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>
ajouter 10 our2
remplacer le 1 par un 2.