如何在缓冲区中生成随机数?

Fri*_*der 14 vi vim

我想在缓冲区中生成10个随机数.

在Emacs我会这样做:

<start macro>(random limit) <eval lisp><newline><end macro> 定义宏,

9 <execute macro>生成10次.

有没有办法在vim中做到这一点?

Ken*_*ent 27

这对你好吗?

:r! echo $RANDOM
Run Code Online (Sandbox Code Playgroud)

然后

9@:
Run Code Online (Sandbox Code Playgroud)

如果您的操作系统上有某些编程语言,那么您也可以评估这些语句.


ken*_*orb 10

Vim不提供本机随机生成器,但是如果您使用Python编译vim,则以下方法将在行尾添加一个随机数字:

:py import vim, random; vim.current.line += str(random.randint(0, 9))
Run Code Online (Sandbox Code Playgroud)

注意:要检查您的vim是否支持Python,请尝试::echo has('python')(1表示是).

您还可以使用shell提供$RANDOM变量,如Kent建议的(与bash/ksh/zsh一起使用),它返回一个伪随机数(0-32767),例如:

:put =system('echo $RANDOM')
Run Code Online (Sandbox Code Playgroud)

要么:

:r! od -An -td -N1 /dev/urandom
Run Code Online (Sandbox Code Playgroud)

在Windows上,您必须安装Cygwin/MSYS/SUA,或者使用Carpetsmoker建议的%RANDOM%变量.

如果您无权访问shell和Python,则对于变通方法,您可以使用当前时间戳中的最后几位数字,例如:

:put =reltimestr(reltime())[-2:]
Run Code Online (Sandbox Code Playgroud)

注意:如果您经常使用它,请编写一个简单的函数return reltimestr(reltime())[-4:].

注意:上述方法仅返回伪随机整数,该整数不应用于生成加密密钥.


要添加更多随机数,请按@:再次重复该命令.或者使用数字前缀(例如10@:)来添加更多由新行分隔的随机数.


有关: