Wednesday, July 21, 2010

Re: gvim substitute

Hi rudy_b!

(please, don't top poste. I am fixing quotation)

On Mi, 21 Jul 2010, rudy_b wrote:
> On Jul 21, 10:58 am, Christian Brabandt <cbli...@256bit.org> wrote:
> > :exe '%s/' join(map(range(100,line('$'),100), '''\%'' . v:val. "l$"'), '\|') '/ (CHECKED)'


> Thank you all for your replies.
> they all made sense.
[...]
> your command just works fine. Can you briefly break down what each
> portion does?

It basically builds up a dynamic substitution command and executes it.

:exe " everything following is an expression that needs to be
executed
'%s/' " start a substitution (as we are evaluating an expression,
we need to return it as a string)
join(...,'\|') " Take the list given as first argument and join it
to a string by putting '\|' between each item (which
means OR as Regular expression, see :h /\|)

map(..., '''\%'' . v:val. "l$"')
" Take the list, given as first argument and for each item, put
\% before it and l$ after it

range(100,...,100) " Create a list of numbers, starting at 100,
walk in steps of hundred and go up at most until

line('$') " numbers, which returns the last line number in
the buffer

So what this does, it builds a pattern, that consists of every 100th line
number, that are joined by a logical OR. E.g. if you file has 350 lines,
this will built a regular expression that looks like this
/\%100l$\|\%200l$\|\%300l$
Which means the end of each given line number. See :h /\%l for the
meaning of that atom.

And after that , we need to append the replacement part which in this
case is simply:

'/ (CHECKED)' " Append the String (Checked)

So in the end, this runs
:%s/\%100l$\|\%200l$\|\%300l$/ (CHECKED)


See also the help at
:h :exe
:h map()
:h range()
:h line()
:h /\|
:h /\%l
:h /$
:h Lists

for details.

regards,
Christian

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

No comments:

Post a Comment