J'ai une ligne comme celle-ci:
function my_function(argument, another argument, but there are spaces)
Je veux remplacer les caractères d'espace (à l'intérieur des noms de l'argument) par un trait de soulignement. Je voudrais donc utiliser:
:s/\ /_/g
mais comment puis-je choisir de ne pas l'appliquer à toute la ligne, mais à partir, disons, de la position du curseur? (Ou le troisième mot)?
\%#
. Ainsi, vous pouvez utiliser::s/\v(%#.*)@<= /_/g
. Ce qui pourrait être décrit comme un espace précédé de (@<=
) caractères après la position du curseur.\%#
astuce, j'accepterai sa réponse si vous n'en écrivez pas une ... Mais l'un ou l'autre d'entre vous pourrait-il expliquer le regexp avec un peu plus explicitement?Réponses:
Vous pouvez utiliser la solution suivante:
Utilisez d'abord v$pour sélectionner le texte du curseur jusqu'à la fin de la ligne. Utilisez ensuite la commande suivante:
Pour
\%V
indiquer de modifier le texte dans la zone précédemment sélectionnée visuellement, voir:h /\%V
.Si je prends votre exemple:
Si mon curseur se trouve sur la 40e colonne et que j'utilise la commande que je viens d'écrire, j'obtiens:
En réponse à votre commentaire, vous pouvez également utiliser
\%#
qui correspond à la position du curseur\%>23c
qui correspond après la 23e colonne.\%>'m
qui correspond après la position d'une marqueVoir
:h /\%#
,:h /\%>c
et:h /\%>'m
.@ User9433424 a donné un moyen d'utiliser
\%#
dans son commentaire. Pour le motif avec la marque, vous pouvez le définir avec ma, puis utiliser:Une explication du modèle donné par @ User9433424 est la suivante:
Vous aurez envie de voir
:h \v
et:h /\@<=
la source
Vous pouvez utiliser look behind (
:h \@<=
) pour vous assurer qu'il y a un «(» précédent et une limite de fin de mot (:h \>
) pour vous assurer que la substitution se produit où vous le souhaitez.Donc, avec le texte:
exécution de la commande:
produira:
Cela pourrait être plus facile que de devoir positionner le curseur à chaque fois, à condition que la substitution ait toujours un point de départ connu.
la source