使用随机数生成进行搜索和替换

3
我有一个配置文件,其中定义了这样一组对象:
[object 1]
param1 = 1
param2 = 2
rate = 0.01

为了测试目的,我想随机化每个rate参数的值。由于我的开发环境已经是vim,我想找到一个正则表达式,可以搜索rate参数并将其替换为随机值。我知道vim不擅长生成随机数,但我也知道你可以使用Python来帮助定义自定义函数。然而,我创建的任何函数都会将结果输出到缓冲区,而不是搜索/替换字符串。

我有一个类似这样的函数:

function! Random()
: python << EOF
: import numpy as np
: print np.random.uniform(0.25,1)
: EOF
: endfunction

我的正则表达式如下:

:s/rate = \d\.\d*/\=Random()

我知道这会用一个随机数替换整行文本,但这是我稍后可以轻松解决的问题。问题在于Random()的输出进入了消息区而非缓冲区。我该如何纠正这个问题?

1
为什么你想要用随机生成的数字来更新文件呢?为什么不将其作为程序的一部分进行生成和使用呢? - Moinuddin Quadri
不幸的是,我无法访问代码的那部分。我的唯一接口是这些配置文件。 - CoconutBandit
1个回答

3

我发现vim函数的返回值可以通过python中的vim.command()函数访问。

我将我的函数修改如下:

function! Random()
: python << EOF
: import vim
: import numpy as np
: vim.command("return {0}".format(np.random.uniform(0.25,1)))
: EOF
: endfunction

这让我得到了我所期望的结果。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接