Sunday, June 9, 2013

Re: Measuring lines

meino.cramer@gmx.de a écrit:
> Hi,
>
> I have a loooong line "of text" (it is not really text...) with a
> bunch of pipe symbols ("|") in it. The distance between the bars
> differ.
> And I am to lazy to do the error prone job to count the spaces...
>
> Is there a easy way to ask vim to do that for me?
> Best would be if it would put the count of spaces right below
> the according "|"....
>
> May be certain trick with search and replace ???

I'm not sure I understand you correctly, but perhaps the following
will help:

function! s:bars ()
let newline = ""
let lineno = line(".")
let str = getline(lineno)
let cnt = stridx(str, "|")
let offset = 0
while cnt >= 0
let newline .= repeat(" ", cnt-offset) . cnt
let offset = strlen(cnt)-1
let str = strpart(str, cnt+1)
let cnt = stridx(str, "|")
endwhile
call append(lineno, newline)
endfunction
com! -buffer Bars call s:bars()

Calling ":Bars" with the cursor on a line like:
| | | | abcde | |
produces:
| | | | abcde | |
0 12 3 10 7 1

So it really counts the number of *characters* between bars. If you
really want only spaces to count (so that "7" here would be "2"),
it'll require a little bit more work.

(I'm sure there's a Vim wizard out there who can do all that with only
":substitute".)

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: