Je travaille avec VIm
et essayez de configurer une commande de recherche et de remplacer pour effectuer des remplacements dans lesquels je peux réutiliser l'expression régulière qui fait partie de ma chaîne de recherche.
Un exemple simple serait une ligne où je veux remplacer (10)
Sur {10}
, Où 10 peut être n'importe quel numéro.
Je suis venu aussi loin
.s/([0-9]*)/what here??/
qui correspond exactement à la partie que je veux.
Maintenant le remplacement, j'ai essayé
.s/([0-9]*)/{\0}/
Mais cela donne une sortie {(10)}
Ensuite, j'ai essayé
.s/(\zs[0-9]*\ze)/{\0}/
Cependant, cela m'a donné ({10})
, Que je ferme aussi, mais pas ce que je veux.
Je pense avoir besoin d'un autre type de marquage/de référencement de retour au lieu de ce \0
, Mais je ne sais pas où regarder. La question est donc, peut-elle être faite dans Vim, et si oui, comment?
\0
est tout le match. Pour n'utiliser qu'une seule partie de celui-ci, vous devez la définir comme ça et utiliser\1
.s/(\([0-9]*\))/{\1}/
Des instructions plus détaillées que vous pouvez trouver ici ou dans l'aide de Vim.
Un meilleur moyen de vous permettre d'accéder à chaque match consiste à ajouter un "C" à la fin du code, plutôt que d'aller à la ligne ligne
%s/print\( .*\)/logging.info\(\1\)/gc
J'ai récemment hérité d'un code hérité et je voulais remplacer toutes les occurrences comme:
print "xx"
print x,y
print 'xx'
à
logging.info("xy")
ou
logging.info(x,y)
((( bâtiment sur la réponse précédente Et dans l'espoir que quelqu'un en bénéficiera, j'ai utilisé la commande suivante, cela changera toutes les occurrences :
%s/print\( .*\)/logging.info\(\1\)/g
Si vous remplacez %
avec .
et supprimer /g
vous finirez avec
.s/print\( .*\)/logging.info\(\1\)
cela vous permettra d'aller sur chaque match et de choisir si vous le modifiez ou non.