2

乱数を生成したい(フリースペース区切りの形式で)ときどきありますが、行数と列数を指定できるようにしたいです。

ここから、乱数の単一のインスタンスを生成するいくつかの動機が見えます (ruby を使用して派生): http://mo.morsi.org/blog/node/299

" 現在の行の末尾に乱数を生成する

function! s:Rand(max)
y a         
redir @b    
ruby << EOF
  rmax = VIM::evaluate("a:max")
  rmax = nil if rmax == ""
  printf rand(rmax).to_s
EOF
redir END 
let @a = strpart(@a, 0, strlen(@a) - 1)
let @b = strpart(@b, 1, strlen(@b) - 1)
let @c = @a . @b
.s/.*/\=@c/g
endfunction

これを簡単に入力できるように拡張するにはどうすればよいでしょうか

:ランド(6,6)

カーソル位置から始まるテーブルを生成しますか?

知らないユーザーのために、vim には +ruby サポートが必要です: ruby​​ サポート付きの vim のインストール (+ruby)

4

2 に答える 2

4

私は通常怠け者で、次のようなことをします

od -iAn -w 12 /dev/urandom | head -n 30

これにより、3 列のランダムな int を持つ行が生成されます。もちろん、これまでと同じようにコマンドを叩くこともできます:

fun! RTable(r,c)
    exec 'r!od -iAn -w' . (4*a:c) . ' /dev/urandom | head -n ' . a:r
endf
command! -nargs=+ RTable call RTable(<f-args>)

できるようになりました。

RTable 5 5
RTable 1 500

于 2012-07-17T23:23:37.977 に答える
3

x 座標と y 座標を循環し、最大の乱数を提供します。

function! Rand(max)
   redir @b
ruby << EOF
  rmax = VIM::evaluate("a:max")
  rmax = nil if rmax == ""
  printf rand(rmax).to_s
EOF
   redir END
   let @a = strpart(@a, 0, strlen(@a) - 1)
   let @b = strpart(@b, 1, strlen(@b) - 1)
   let @c = @a . @b
   return @c
endfunction

fun! RandTable(...)
   for y in range(a:2)
      for x in range(a:1)
         if a:0 > 2
            let rand = Rand(a:3)
         else
            let rand = Rand(10)
         end
         exe "norm i" . rand . "  "
      endfor
      exe "norm Xi\<cr>"
   endfor
endfun

command! -nargs=* Rand call RandTable(<f-args>)

:Rand 6 6orを使用できるよう:Rand 6 6 6になりました。ここで、3 番目の引数は乱数の最大値を指定します。

于 2012-07-17T22:04:42.223 に答える