我想在缓冲区中生成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@:)来添加更多由新行分隔的随机数.
有关: