2017-08-05 23:27 GMT+03:00 porphyry5 <gl00...@gmail.com>: > On Friday, August 4, 2017 at 10:03:16 AM UTC-7, porphyry5 wrote: >> :h submatch( includes >> Example: >> :s/\d\+/\=submatch(0) + 1/ >> This finds the first number in the line and adds one to it. >> >> Needing to increment several fields consisting of underscore and a single >> digit (_\d) I modified the above along the lines of >> >> s/_\(\d\)/\='_'.submatch(1) + 1/gc >> >> most of which merely replaced the entire field with '1' >> >> Thinking the problem might be a conflict between the types, string and >> number, I tried >> >> s/_\(\d\)/\="_".nr2char(submatch(1) + 1)/gc >> then >> s/_\(\d\)/\="_".nr2char(submatch(1) + 31)/gc >> and finally success with >> s/_\(\d\)/\="_".nr2char(submatch(1) + 49)/gc >> which is limited to operations on just a single digit. >> >> So, is there a generally reliable method of performing arithmetic on numeric >> fields embedded in a larger string pattern with :s? Thank you. >> >> >> >> >> >> >> >> >> >> -- >> >> Graham Lawrence > > Thank you, > s/_\(\d\)/\='_'.(submatch(1)+1)/g > works perfectly, and I see what I was trying initially > s/_\(\d\)/\='_'.submatch(1)+1/g > is actually equivalent to > s/_\d/\=submatch(0)+1/g > > In the meantime, I read :h substitute( and found > s/_\(\d\)/\=substitute(submatch(0),'\d',submatch(1)+1,'')/g > which avoids the problem by making a secondary pattern selection of the > number alone. But that's more typing, so I will pay attention to operator > precedence in future.
If you write using more then one language there is a good rule: do not pay attention to operator precedence, just use parenthesis every time you are not sure. I normally just assume that precedence is “[*/%] > [-+] > binary comparison (>, <, >=, <=, ==, etc) > binary logical (not bitwise) operators (&&, ||)” which is rather safe (though there are languages where even these assumptions are not valid), and everything else needs parenthesis. > > -- > -- > You received this message from the "vim_use" maillist. > Do not top-post! Type your reply below the text you are replying to. > For more information, visit http://www.vim.org/maillist.php > > --- > You received this message because you are subscribed to the Google Groups > "vim_use" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to vim_use+unsubscr...@googlegroups.com. > For more options, visit https://groups.google.com/d/optout. -- -- You received this message from the "vim_use" maillist. Do not top-post! Type your reply below the text you are replying to. For more information, visit http://www.vim.org/maillist.php --- You received this message because you are subscribed to the Google Groups "vim_use" group. To unsubscribe from this group and stop receiving emails from it, send an email to vim_use+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.