À l'aide de VI, comment puis-je rechercher et remplacer l'instruction suivante?

StackOverflow https://stackoverflow.com/questions/823484

  •  05-07-2019
  •  | 
  •  

Question

Je dois remplacer ce qui suit:

CREATE TABLE /*!32312 IF NOT EXISTS*/ `access`

à

CREATE TABLE IF NOT EXISTS `access`

j'ai essayé

:%s/\/\*\!\d+(.*)\*\//\1/g

Mais cela ne semblait pas aller. Qu'est-ce que je fais mal?

Était-ce utile?

La solution

vim nécessite une barre oblique inverse + (ou utilisez * à la place). De plus, vous devez supprimer la barre oblique inverse en regroupant les parenthèses dans vim. Ainsi:

:%s/\/\*\!\d\+\(.*\)\*\//\1/g

Oui, les expressions rationnelles posix de style ancien de Vim sont nulles: /

Éditer: Comme mentionné dans les commentaires ci-dessous, + fonctionne si échappé en tant que \ +. Et \ d est en fait pris en charge, oups. Edité l'exemple regex pour corriger cela. Voir également l'exemple de Brian Carper pour une version plus succincte et lisible.

Autres conseils

Utilisez "très magique" et utilisez des délimiteurs autres que ceux par défaut pour faciliter la lecture (et la mémorisation).

:%s@\v/\*!\d+(.*)\*/@\1@g

Sans "très magique" vous devez mettre une barre oblique inverse devant + et () (mais pas devant * ou d'autres éléments). Ce n'est pas très cohérent.

Légèrement différent et plus efficace avec [^ *] +: -)

1,$s/\v\/\*\!\d+\s*([^*]+)\*\//\1
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top