【问题标题】:How to generate random numbers in the buffer?如何在缓冲区中生成随机数?
【发布时间】:2013-12-24 04:38:42
【问题描述】:

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

在 Emacs 中我会这样做:

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

9 <execute macro> 生成 10 次。

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

【问题讨论】:

    标签: vim vi


    【解决方案1】:

    这适合你吗?

    :r! echo $RANDOM
    

    然后

    9@:
    

    如果您的操作系统上有特定的编程语言环境可用,您也可以评估这些语句。

    【讨论】:

    • 知道 gVim 中的等价物吗?
    • @Jeff 这适用于 gVim。我在 Windows 上,所以用 %random% 替换了 $random。休息刚刚好
    • 我在 Windows 上尝试过这个,但答案中的命令不起作用。所以,我在 cygwin 中打开了 vim,然后它就可以工作了。
    • @user674669 当然它不会在 Windows 上工作,因为 Windows 上没有 $RANDOM sys 环境。 :! 将执行外部命令。就像 Windows 上没有 du, ls, readlink, cp ... 一样。好吧cygwin我没有太多经验..
    • 此外,您可以使用 :r!echo $(($RANDOM \% 5 + 1)) 获取 1 到 6 之间的值。相应地调整值以获得其他范围。
    【解决方案2】:

    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@:)以添加更多由新行分隔的随机数。


    相关:

    【讨论】:

    • 对于perl,可以试试:put =system("perl -e int(rand()*10)+1"),例如:)
    猜你喜欢
    • 2023-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-13
    • 1970-01-01
    相关资源
    最近更新 更多