Hi esquifit!

On Mi, 12 Mai 2010, esquifit wrote:

> On 11 Maig, 20:31, Tim Chase <[email protected]> wrote:
> > Once you have that...
> >
> > > - Every space that's in a line must be counted, placed upfront the
> > > line, and by the number + 1 needs to be done.
> >
> > You can use the following:
> >
> >    :%s/.*/\=strlen(substitute(submatch(0), '\S\+', '', 'g')).'
> > '.submatch(0)
> >
> > to prepend the space-counts.
> 
> How would be the performance of such a formula when processing a big
> file? I came upon another more or less obvious solution -again, with
> some simplifications like not making distinction among spaces and
> tabs. I'm using a macro:
> 
> yyP:s/\S//g<CR>"=col('$')<CR>pJ
> 
> where <CR> represent an actual Return key press when recording the
> macro. Short explanation:
> 
> yyP                   duplicates the current line
> :s/\S//g<CR>  deletes all non-space characters from the (upper)
> duplicated line
> "=col('$')<CR>p       inserts the column number the cursor is at, which
> happens to be the number of spaces + 1
> J                     concatenates the upper line (consisting of spaces and 
> the number)
> and the (original) lower line
> 
> I run this macro on all lines (99999 times or so) and at the end I
> suppress the leading spaces with
> 
> :%s/\s//
> 
> Without having made any benchmarking, I *suspect* that this can be
> quicker than using strlen, and submatches.  I'd like to hear your
> opinion about this.

You can use the timing.vim plugin 
(http://www.vim.org/scripts/script.php?script_id=1530) to measure. I 
would be interested in any results.

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

Reply via email to