Thursday, May 9, 2013

Re: increment list

> Quite often I've got a list, either:
>
> 1 - do this first
> 2 - do this next
> 3 - go home
>
> or
> /^
> ([0-3][0-9])- # 0 Day
> ([A-Z][a-z][a-z])- # 1 Month
> ([0-9]{4}) # 2 Year
> /x;
>
> And I alter something and need to change the list. I can make a macro
> where I 'j0cw' or 'f#wcw' but then how do I make the incrementing
> work?

You can try defining a function like this:

function! Increment (...) range
let i = a:firstline
let pattern = a:0 ? a:1 : '\d\+'
while i <= a:lastline
call setline(i, substitute(getline(i), pattern, '\=submatch(0)+1', ''))
let i += 1
endwhile
endfunction

Then you can call Increment on a range and it will increment all numbers matching the given pattern (or the first encountered number if no pattern is given). For instance, the first lists could be incremented with

:'<,'>call Increment()

(in Visual mode) and the second with

:'<,'>call Increment('#\s*\zs\d\+')

(Don't forget `\zs'!)

That was just off my head, though, and simpler solutions may exist.

Best,
Paul

--
--
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+unsubscribe@googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.

No comments: