This answer teaches me how to yank matches of regex group into one register. But I want to yank two into two different registers. I've tried the following but failed.

:%s/\(regex1\)\(regex2\)/\=setreg('a', submatch(1))\=setreg('b', submatch(2))/n

An error thrown out says invalid expression. Then I modified it to be like this:

:%s/\(regex1\)\(regex2\)/\=setreg('a', submatch(1)) | \=setreg('b', submatch(2))/n

Then I get the error E493 backwards range given.

Can I do what I want? If so, how should I correct this snippet?


The idea is to give back a single (replace) result; so, concatenate works:

:%s/\(regex1\)\(regex2\)/\=setreg('a', submatch(1)) . setreg('b', submatch(2))/n
  • Yeh, it works. Thanks. Can you tell me how to get the help manual for me to further learn it myself? Aug 16 '15 at 9:56
  • 1
    You're welcome - I went from reading :help :substitute to :help sub-replace-special, and from there, to :help sub-replace-expression, as this is were the reading of those help sections pointed me to (by following \=). And in the 3rd mentioned section, there is an example that concatenates 3 strings in the replace part. This gave me the idea.
    – VanLaser
    Aug 16 '15 at 10:03

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.