2010-03-24 3 views

Répondre

7

La meilleure façon de le faire serait visuellement sélectionner le contenu de la chaîne ed [] et effectuer le remplacement juste sur cette sélection:

vi]:s/\%V \%V/_/g 

Cela ne fonctionne pas très bien si vous essayez faire des choses par programme, cependant. Dans ce cas, vous pouvez faire correspondre la chaîne entière [] et utiliser un replacement expression pour construire le résultat.

:s/\[[^\]]*\]/\=substitute(submatch(0), ' ', '_', 'g')/g 
+0

l'expression de remplacement est cool. Le mieux que j'avais était de remplacer le premier bloc d'espace, puis appuyez sur & jusqu'à ce qu'il vous dise qu'il ne pouvait pas trouver le motif – McBeth

+0

le = substitut (submatch (0) ... était ce dont j'avais besoin. – Glennular

1

avec le réglage normal de la 'magie' que vous voulez faire

:s/] \[/][/ 

ou plus fancily

:s/]\zs\s\+\ze\[// 

ou avec le niveau magique explicitement défini dans le regex

:s/\V]\zs\s\+\ze[// 

\ ZS et \ ze limite la substitution à la zone qu'ils enferment. \ M désactive complètement la magie, de sorte que chaque caractère ou combo de caractères non précédé de \ est pris littéralement. 'Magic' (:help 'magic') est une option globale qui détermine comment les caractères potentiellement spéciaux dans les regex sont interprétés.

+0

vous avez oublié regarder en arrière et look-ahead ('s /] \ @<= \ s \ + \ [\ @ = // '). – ZyX

+0

C'est '\ V' qui fait que tout autre que' \ 'est interprété littéralement. '\ M' est une étape entre' \ V' et l'installation par défaut. Changer la valeur de "magic" demande simplement des ennuis. – jamessan

+0

@jamessan oups, merci. Fixé. Il est plus facile de se souvenir de @ZyX \ zs & \ ze et je pense que plus vite, je préfère les utiliser lorsque c'est possible. En lisant la mise à jour, j'ai découvert que ma réponse n'est pas totalement une réponse à la question. – intuited

-1

Vous pouvez toujours aller pour trouver interactive et remplacer, ce qui peut être fait avec le drapeau c