2017-08-04 20:03 GMT+03:00 Graham Lawrence <gl00...@gmail.com>:
> :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'

Which it did pecause you don’t pay attention to operator precedence,
not because there is some problem with Vim performing arithmetic on
strings. Just add parenthesis so it will *first* add *then* concat.
Currently all binary operators are left associative and `.` and `+`
have the same precedence. Exactly the same case (concat then add) is
disambiguated as an example at `:h expr-+`.

>
> 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
>
> --
> --
> 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.

Reply via email to