vim-users.jp

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')で検査しておくことをお薦めします。

Shougo

もどる
blog comments powered by Disqus