我知道有各种方法来获取随机数,例如,来自shell.但是,我在一部很少编译的Android手机上运行vim.而且,它不必是严格随机的.问题是,什么是有趣的,或简洁,或快(即与VIM原生功能),或短的方式来获得相当不错的随机数在Vim的序列?
ZyX*_*ZyX 16
尝试类似的东西
function Rand()
return str2nr(matchstr(reltimestr(reltime()), '\v\.@<=\d+')[1:])
endfunction
Run Code Online (Sandbox Code Playgroud)
.我知道没有更好的选择,然后使用一些时间函数(有两个:reltime() 和localtime(),但后者只是每秒更新).我宁愿避免随机数或使用pyeval('random.randint(1, 10)')(前面加python import random),因为shell很慢,我不相信基于时间的解决方案.
注意:文档说返回的项目的格式reltime()取决于系统,因此我正在使用reltimestr(),而不是做一些reltime()[1]看起来像是否包含纳秒的东西.
我最近自己玩过Vim脚本中的随机数字.以下是我在此过程中发现的一些资源.
无论如何,如果可以,请使用外部随机数生成器.通常,它们比在Vim脚本中可以完成的任何事情更好,更快.
例如,试试
:python import random; print random.randrange(1, 7):echo system('echo $RANDOM')Vim脚本库.这些希望努力提供体面质量的RNG实施.
vital.vim是由vim-jp用户组创建的优秀且全面的库.他们的随机数生成器具有令人印象深刻的功能,是我所知道的最好的纯Vim脚本RNG.vital.vim使用 Xorshift算法.看看这个!
使用vital.vim滚动模具:
let Random = vital#of('vital').import('Random')
echo Random.range(1, 7)
Run Code Online (Sandbox Code Playgroud)vim-rng是一个小型随机数生成器插件.它导出了几个依赖于乘法携带算法的全局函数.这个项目似乎正在进行中.
用rng滚动模具:
echo RandomNumber(1, 6)
Run Code Online (Sandbox Code Playgroud)magnum.vim是我自己的小整数库.我最近添加了一个随机数生成器,可生成任意大小的整数.它使用 XORSHIFT-ADD算法.
用magnum.vim滚动模具:
let six = magnum#Int(6)
echo magnum#random#NextInt(six).Add(magnum#ONE).Number()
Run Code Online (Sandbox Code Playgroud)Rndm的存在时间远远超过其他图书馆.它的功能作为一些全局功能公开.用Rndm滚动模具:
echo Urndm(1, 6)
Run Code Online (Sandbox Code Playgroud)最后,一些链接到富有洞察力的讨论和Vim脚本片段.
ZyXreltime在此页面上的代码段.
这个旧的邮件列表讨论有几个Vim脚本片段.Bee-9给出的第一个限制为16位,但我发现它非常有效.这里是:
let g:rnd = localtime() % 0x10000
function! Random(n) abort
let g:rnd = (g:rnd * 31421 + 6927) % 0x10000
return g:rnd * a:n / 0x10000
endfunction
Run Code Online (Sandbox Code Playgroud)另一个脚本,发现于名为Bart的个人配置文件中.
关于Vimcasts.org的第57集讨论了Vim的'表达式寄存器'并且始终引用随机数示例.请参阅此Stackoverflow问题和ZyX的代码段.推荐的.
wikia上的Vim wiki有一篇文章"跳转到随机行",其中有一些资源尚未提及.
| 归档时间: |
|
| 查看次数: |
1947 次 |
| 最近记录: |