Hack #98: VimScriptで疑似乱数を生成する
Posted at 2009/11/05ツイート
VimScriptには、残念ながら疑似乱数を生成するための関数が存在しません。しかし工夫すれば、VimScriptでも乱数生成をすることができます。活用シーンはさほど多くありませんが、ちょっとした裏技として知っておくと良いでしょう。
乱数の生成方法
乱数を生成するためには、次のようなVimScriptを用います。
let l:match_end = matchend(reltimestr(reltime()), '\d\+\.') + 1
let l:rand = reltimestr(reltime())[l:match_end : ] % (n + 1)
reltimestr(reltime())
の部分で、3939190.694889のようにVimが起動してからの時間をマイクロ秒単位で取得します。
このうち、0.1秒未満の部分を乱数用に使用するため、reltimestr(reltime())[l:match_end : ]
でマッチ部分を取り出しています。
あとはn+1で剰余を取ることで、0~nまでの簡単な乱数が生成されます。実用上はこの程度の精度で充分でしょう。
使用上の注意
reltimestr()
やreltime()
はVimが+reltimeでコンパイルされていないと動作しません。
大抵の環境では動作するはずですが、使用する場合には念のため、has('reltime')
で検査しておくことをお薦めします。
もどる
blog comments powered by Disqus