(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