Alternative pour échapper aux barres obliques à la recherche et remplacer pour les longues chaînes

10

Existe-t-il une alternative dans la recherche et le remplacement vim pour les chaînes, que d'avoir à échapper chaque caractère spécial dans la chaîne.

Par exemple, si je veux faire correspondre la chaîne suivante et la remplacer par quelque chose

[ERROR] Login unsucessful

Ensuite, je dois faire

:%s/\[ERROR\]\ Login\ unsucessful/something/g

Et cela devient beaucoup plus laid et douloureux pour les chaînes complexes contenant beaucoup de caractères spéciaux

Je voudrais faire quelque chose comme

:%s/"[ERROR] Login unsucessful"/something/g

ce qui éviterait toute fuite. Existe-t-il une fonctionnalité comme celle-ci?

MohitC
la source

Réponses:

16

Vous pouvez utiliser le very-nomagiccommutateur. Voir :h \Vpour plus de détails. Cela vous donnerait %s/\V[ERROR] Login unsuccessful/something/g. Il y a aussi le nomagiccommutateur \M, qui est une version plus légère \Vet ne semble pas être largement utilisé.

Notez également que vous n'avez pas à échapper aux espaces comme vous le faites dans votre exemple, même lorsque vous ne l'utilisez pas \V.

PhilippFrank
la source
Merci. Exactement ce que je voulais. n'a pas obtenu cela sur ma recherche google, ne sais pas pourquoi.
MohitC
2
@MohitC Je mappe /pour /\vactiver "très magique" pour la plupart des recherches, j'ai donc mappé //pour /démarrer une recherche non modifiée (utile pour parcourir l'historique de recherche en ignorant les modificateurs) et /v/pour /\Vdésactiver rapidement toute magie pour la recherche.
Kyle Strand
@MohitC En fait, ma configuration est plus compliquée que cela, car j'utilise également un plugin pour utiliser "très magique" aussi systématiquement que possible dans tous les contextes. Voir ma réponse ici .
Kyle Strand
7

Vous n'avez pas besoin d'échapper aux espaces. Donc ça:

:%s/\[ERROR\]\ Login\ unsucessful/something/g

devrait en fait être:

:%s/\[ERROR\] Login unsucessful/something/g

Et, bien sûr, vous pouvez activer un "mode" très nomagique pour rendre ces caractères spéciaux moins spéciaux:

:%s/\V[ERROR] Login unsucessful/something/g

Tu vois :help /magic.

romainl
la source
2

En plus des drapeaux nomagiques mentionnés dans d'autres réponses.

Il arrive souvent que vous n'ayez pas besoin d'être précis dans votre chaîne de recherche

Par exemple, pour faire correspondre

[ERROR] Login unsucessful

Vous pourriez utiliser l'expression

.ERROR. Login unsucessful

Évidemment, vous devez savoir que vos données ne contiendront pas d'autres chaînes, différentes de votre cible cible mais correspondant à l'expression.

RedGrittyBrick
la source