سؤال

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?

هل كانت مفيدة؟

المحلول

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 /\{-

نصائح أخرى

This should work:

:%s/\v(pointer.*\(\))/\1.value()/
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top