2017-01-13 2 views
3

У меня есть файл конфигурации, который определяет коллекцию объектов, как это:Поиск и замена с генерации случайных чисел

[object 1] 
param1 = 1 
param2 = 2 
rate = 0.01 

Для тестирования я хочу рандомизации значение каждого параметра rate. Поскольку моя среда разработки уже является vim, я хочу найти регулярное выражение, которое может искать параметр скорости и заменить его случайным значением. Я знаю, что 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

Почему вы хотите обновить файл с случайным числом? Почему бы не генерировать и использовать номер в качестве части вашей программы? –

+0

К сожалению, у меня нет доступа к этой части кода. Мой единственный интерфейс с этими конфигурационными файлами. – CoconutBandit

ответ

3

Я нашел, что возвращаемое значение функции vim можно получить через функцию vim.command() в python.

Я изменил свою функцию следующим образом:

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

это дало результаты, которые я искал

Смежные вопросы