Hi,
Yang Luo schrieb am 14.07.2016 um 12:06:
> 
> I complete the function as follow, now I want to add radix option, but I don't know how to get width. Can you help me complement it
> 
> function InsertNumber(start, end,...) " step,is_column_first_0_padding,radix(b,d,o,x)
>         let l:i = a:start
>         let l:curr_line = 0
>     if a:0 == 0          " a:0 extra argument numbers
>         let l:step = 1
>     else   
>         let l:step = a:1 " the first extra argument
>     endif
>     if a:0 == 2
>         let l:is_padding = 0
>     else
>         let l:is_padding = 1 "default padding
>     endif
>     if a:0 == 3
>         let l:radix = a:3
>     else
>         let l:radix = ""
>     endif
>     if l:radix == "b"
>     elseif l:radix == "o"
>     elseif l:radix == "x"
>     else
>         let l:width = float2nr(trunc(log10(a:end))) + 1
>         let l:format = '%0'.l:width.'d'
>     endif
>     while l:i <= a:end
>         if l:step <= 0
>             echo "Error: step cannot <= 0."
>             break
>         endif
>         if l:is_padding == 1
>                     call append(curr_line, printf(l:format, l:i))
>             else
>             call append(curr_line, l:i)
>         endif
>         let l:i += l:step
>                 let l:curr_line += 1
>         endwhile
> endfunction
> 
there is an simpler way to calculate the necessary width -- just count
the number of characters used for the a:end parameter when printed:
  let width = strlen(printf('%d', a:end))
This can also be used to calculate the width for other radices than 10:
  if l:radix == "b"
    let width = strlen(printf('%x', a:end)) * 4
  elseif l:radix == "o"
    let width = strlen(printf('%o', a:end))
  elseif l:radix == "x"
    let width = strlen(printf('%x', a:end))
  else
    let width = strlen(printf('%d', a:end))
  endif
Note that there is no specification for output as a binary number in
printf().
Regards,
Jürgen
-- 
Sometimes I think the surest sign that intelligent life exists elsewhere
in the universe is that none of it has tried to contact us.     (Calvin)
-- 
-- 
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/d/optout.
No comments:
Post a Comment