Question

I have a number of lines like this:

pointer->[some Random Number Of Alphabets](),

I want to search for this pattern and append .value() to it exactly after the () so it becomes pointer->[some Random Number Of Alphabets]().value(), but what happens is it overwrites the "," and the space after it which I'm intending to leave unaffected. the command I'm using is this:

%s/\(\<pointer->.*()\), \>/\1.value()/

What am I doing wrong here?

Était-ce utile?

La solution

I like to use \ze in these cases

:%s/\<pointer->.*()\ze, /&.value()/
  • \ze marks the end of the match
  • & is equivalent to \0
  • remove the \> as I feel like this is an accident. See :h /\>
  • May want to use an non-greedy qualifier like \{-} instead of *, better yet maybe [^(]*
  • May want to use \zs to the mark start of the match and eliminate the need for &. See @Pak's comment below

For more help see:

:h /\ze
:h s/\&
:h /\>
:h /\{-

Autres conseils

This should work:

:%s/\v(pointer.*\(\))/\1.value()/
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top