Existe-t-il un moyen d'augmenter / diminuer le premier chiffre après / sous le curseur, pas le nombre entier.
Je sais que ce n'est pas comme ça que vim fonctionne, mais y a-t-il un plugin qui fait ça? Je n'ai pas pu le trouver.
Il est très utile lors de l'édition de CSS et dans d'autres cas également.
Donné:
▐margin: 10px
Quand j'appuie, CTRL-A
je veux voir:
▐margin: 20px
Réel:
▐margin: 11px
key-bindings
arithmetic
firedev
la source
la source
10<C-a>
ajouter 10 our2
remplacer le 1 par un 2.Réponses:
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):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.<C-a>
ou<C-x>
.lxh
pour supprimer l'espace que nous avons ajouté.J'ai mappé cela à
g<C-a>
etg<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):
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:la source
Incrément de base
Voici une macro simple pour effectuer l'action:
En mode normal, vous
m`
Marquez votre emplacementl
déplacer un personnage vers la droitev$x
couper à la fin de la ligneh
revenir à sa position d'origine<c-a>
incrémenter (ou décrémenter)p
recollez votre coupe``
revenir à votre marquePasser au numéro suivant
Si vous souhaitez passer au numéro suivant (ou rester à votre position actuelle si sur un numéro), vous avez besoin d'une fonction qui vérifie le caractère cursé actuel et éventuellement passer au numéro suivant.
NextNum
obtient le caractère sous le curseur, vérifie si c'est un nombre et sinon recherche le numéro suivant. Après cela, le reste est le même. Si vous voulez que le mappage soit différent, changez simplement lennoremap <leader>a
par ce que vous souhaitez, par exemplennoremap <c-a>
.Ignorer les négatifs et les nombres supérieurs à 9
Si vous souhaitez simplement parcourir les chiffres et ne pas les faire agir comme des entiers signés, les fonctions suivantes incrémenteront et décrémenteront et passeront à 0 et 9.
Maintenant, lorsque vous êtes sur
8
et tapez,<leader>a
vous obtenez9
. Le refaire se traduit par0
. Si vous appuyez<leader>x
sur0
vous9
. Il en va de même pour les nombres négatifs. Les fonctions coupent un seul caractère, incrémentent, décrémentent ou survolent puis collent en place.la source
<c-a>/<c-x>
également.<c-a>
et<c-x>
vers autre chose parce que le comportement par défaut n'est pas très utile.<c-a>
et<c-x>
beaucoup. Chaque fois que je mets à jour une version ou augmente une variable de plage, je viens[N]<c-a>
au lieu de supprimer et de remplacer.<c-a>
et<c-x>
qui devrait être abandonné pour une fonction qui fait la même chose , mais ne tient pas compte du tableau de bord.Voici une version que j'ai écrite en utilisant une expression de substitution:
Chacun recherche simplement le premier caractère numérique sur la ligne et en ajoute ou en soustrait un s'il se trouve dans la plage [0-8] ou [1-9], respectivement. Il a trois problèmes:
"/
et si vous avez activé la recherche, alors tous les nombres dans le tampon actuel seront mis en évidence lorsque vous l'utiliserez. Vous pouvez ajouter:noh<CR>
à chacune desmap
commandes ci-dessus pour arrêter la mise en évidence, mais je ne sais pas comment empêcher gentiment le registre d'être encombré.De plus, si c'était moi, je mapperais ce qui précède à
<leader>a
et<leader>x
, plutôt qu'àCTRL-A/X
. De cette façon, vous disposez des deux comportements.<leader>
est, par défaut, la touche barre oblique inverse (\
).la source
:noh
. Mais le vrai problème est qu'il ne peut pas utiliser la position du curseur comme base et donc vous ne pouvez incrémenter que le premier chiffre de la ligne.noremap
) et jamaismap
. Voir cette page pour une explication plus détaillée de cela.