【发布时间】:2013-12-24 04:38:42
【问题描述】:
我想在缓冲区中生成 10 个随机数。
在 Emacs 中我会这样做:
<start macro>(random limit) <eval lisp><newline><end macro>定义宏,
和9 <execute macro> 生成 10 次。
有没有办法在 vim 中做到这一点?
【问题讨论】:
我想在缓冲区中生成 10 个随机数。
在 Emacs 中我会这样做:
<start macro>(random limit) <eval lisp><newline><end macro>定义宏,
和9 <execute macro> 生成 10 次。
有没有办法在 vim 中做到这一点?
【问题讨论】:
这适合你吗?
:r! echo $RANDOM
然后
9@:
如果您的操作系统上有特定的编程语言环境可用,您也可以评估这些语句。
【讨论】:
$RANDOM sys 环境。 :! 将执行外部命令。就像 Windows 上没有 du, ls, readlink, cp ... 一样。好吧cygwin我没有太多经验..
:r!echo $(($RANDOM \% 5 + 1)) 获取 1 到 6 之间的值。相应地调整值以获得其他范围。
Vim 不提供本机随机生成器,但是如果您使用 Python 编译 vim,以下方法将在您的行尾附加一个随机数字:
:py import vim, random; vim.current.line += str(random.randint(0, 9))
注意:要检查您的 vim 是否支持 Python,请尝试::echo has('python')(1 表示支持)。
您还可以使用提供 $RANDOM 变量的 shell,如 Kent 建议的(与 bash/ksh/zsh 一起使用),它返回一个伪随机数 (0-32767),例如:
:put =system('echo $RANDOM')
或:
:r! od -An -td -N1 /dev/urandom
在 Windows 上,您必须安装 Cygwin/MSYS/SUA,或使用 %RANDOM% 变量作为建议的Carpetsmoker。
如果您无法访问 shell 和 Python,作为解决方法,您可以使用当前时间戳的最后几位数字,例如:
:put =reltimestr(reltime())[-2:]
注意:如果您经常使用它,请编写一个简单的函数,它将return reltimestr(reltime())[-4:].
注意:以上方法只返回一个伪随机整数,不应用于生成加密密钥。
要添加更多随机数,请按 @: 再次重复该命令。或以数字为前缀(如 10@:)以添加更多由新行分隔的随机数。
相关:
【讨论】:
:put =system("perl -e int(rand()*10)+1"),例如:)