J'ai un gros fichier HTML qui a beaucoup de balisage qui ressemble à ceci:
<p class="MsoNormal" style="margin: 0in 0in 0pt;">
<span style="font-size: small; font-family: Times New Roman;">stuff here</span>
</p>
J'essaie de faire une recherche-remplacement de Vim pour me débarrasser de tous les class=""
et style=""
mais j'ai du mal à rendre le match désordonné.
Ma première tentative a été celle-ci
%s/style=".*?"//g
mais Vim ne semble pas aimer le ?
. Malheureusement, supprimer le ?
rend la correspondance trop gourmande.
Comment puis-je rendre mon match désagréable?
Au lieu de .*
, utilisez .\{-}
.
%s/style=".\{-}"//g
Voir aussi :help non-greedy
La recherche non gourmande dans vim s'effectue à l'aide de l'opérateur {-}. Comme ça:
%s/style=".\{-}"//g
essayez juste:
:help non-greedy
Quel est le problème avec
%s/style="[^"]*"//g
Si vous êtes plus à l'aise avec la syntaxe PCRE regex, qui
vous avez [g] vim compilé avec la fonctionnalité Perl, testez à l'aide de
: ver et inspecter les caractéristiques; si + Perl est là, vous êtes prêt à partir)
essayez de rechercher/remplacer en utilisant
:perldo s///
Exemple. Échangez les attributs src et alt dans la balise img:
<p class="logo"><a href="/"><img src="/caminoglobal_en/includes/themes/camino/images/header_logo.png" alt=""></a></p>
:perldo s/(src=".*?")\s+(alt=".*?")/$2 $1/
<p class="logo"><a href="/"><img alt="" src="/caminoglobal_en/includes/themes/camino/images/header_logo.png"></a></p>
J'ai trouvé qu'une bonne solution à ce type de question est la suivante:
:%! sed ...
(ou Perl si vous préférez). IOW, plutôt que d'apprendre les particularités de Vim, utilisez un outil que vous connaissez déjà. Utiliser Perl ferait le? modificateur de travail pour désaccorder le match.
Avec \v
(comme suggéré dans plusieurs commentaires)
:%s/\v(style|class)\=".{-}"//g
Le plugin eregex.vim gère les opérateurs non gourmands de style Perl *?
et +?