vim: utilisez la chaîne de recherche dans la commande replace

16

J'utilise souvent la /commande de recherche vim pour vérifier mes expressions régulières (juste pour voir à quoi cela correspond). Après cela, j'utilise généralement la :%scommande replace, où j'utilise cette expression rationnelle de recherche comme chaîne à remplacer, par exemple, je cherche d'abord une telle chaîne:

/TP-\(\d\{5\}\)-DD-\d\{3\}

Cela correspond exactement à ce que je veux, donc je fais mon remplacement:

:%s/TP-\(\d\{5\}\)-DD-\d\{3\}/\1/g

Mais je dois réécrire toute l'expression rationnelle ici. Habituellement, cette expression régulière est beaucoup plus longue, c'est pourquoi je recherche une solution:

Existe-t-il un raccourci ou un script vim pour coller ce modèle de recherche directement dans la commande replace?

J'utilise vim dans le terminal (pas de gvim).

kars7e
la source

Réponses:

20

En général, une expression régulière vide signifie utiliser l'expression régulière entrée précédemment, :%s//\1/gvous devez donc faire ce que vous voulez.

geekosaure
la source
Woah, c'est aussi simple que ça! Exactement ce dont j'avais besoin, merci.
kars7e
10
De plus, si vous souhaitez vérifier ou modifier le dernier modèle utilisé, vous pouvez utiliser Control-r puis /insérer le contenu du registre de modèle de recherche ( /) directement dans une ligne de commande partiellement tapée (par exemple juste après :%s/).
Chris Johnsen
c'est aussi un indice très utile. Merci @Chris! +1
kars7e
Que se passe-t-il si je veux suivre "\ 1" avec un nombre comme disons 23? Comment puis-je éviter qu'il soit interprété comme "\ 123"?
Champ
@Champ Comme les références arrières remontent uniquement \9, il n'y a aucune ambiguïté.
Kusalananda
4

Un autre bon moyen de voir les recherches de regexes passées ainsi que les commandes Ex et d'y apporter des modifications est de modifier ces commandes en mode normal. À partir de ce mode, vous aurez tous vos pouvoirs vim, y compris le copier-coller.

  • Recherche: plutôt que ?ou /pour rechercher, essayez q/ouq?
  • pour les commandes Ex, plutôt que d' :essayerq:
  • pour quitter ce mode, utilisez CtrlC

Pour en savoir plus, voir :help q:.

Ryan Carney
la source