Я хотел бы создать одно или несколько случайных чисел, разделенных новой строкой.
Как это можно сделать?
text-generation
kenorb
источник
источник
:python
?Ответы:
Для этого нет встроенных средств, поэтому вам нужно использовать что-то внешнее.
UNIX Shell (
/bin/sh
)Вызов:
с
system()
это хороший способ. Вы можете получить только цифры, заменивtr
наgrep
:Вы можете использовать это в Vim следующим образом:
Число 15 - это количество чисел, которое вы хотите (скорректируйте соответственно). Это должно работать на Linux, BSD, OSX и других системах UNIX. Это не будет работать на MS Windows.
Также см. Мой пост в блоге « Генерация паролей из командной строки » (есть много плохих решений для этого там).
Рубин
Ruby, вероятно, является следующим лучшим выбором, так как скрипты на Ruby кажутся немного более распространенными, чем скрипты на Python. Получить случайное число легко:
Или получить 15 номеров:
питон
Вы можете использовать случайный модуль; чтобы получить один номер:
Или 15 номеров:
Это должно работать как для Python 2 и 3.
Windows PowerShell
Вы можете использовать,
Get-Random
чтобы получить случайное число:Windows
cmd.exe
Windows 7 и более поздние версии должны поставляться с PowerShell, но если вы хотите максимальной совместимости, вы можете использовать
cmd.exe
. У него есть специальная переменная%RANDOM%
:Примечание: это не очень случайно! , использует время (!)
Обратите внимание, что вам не нужно использовать привязки Ruby или Python для использования решений Ruby или Python; Вы также можете создать отдельный скрипт и вызывать их с помощью
system("python -c '...'")
(для этого, конечно, требуется установить ruby / python).источник
tr -d '[:space:]'
, возможно,tr -cd '[:digit:]'
для фильтра grep?:r! hexdump -n $((3*4)) -e '"%d"' /dev/urandom
генерировать 3 случайных целых числа со знаком.:r! hexdump -n $((3*4)) -e '"\%d\n"' /dev/urandom
Вот чистое решение vimscript . Я не создал его, он был разработан Чарльзом Э. Кэмпбеллом. Вы можете найти репозиторий Github с его кодом здесь .
Алгоритм использует 3 начальных числа, сгенерированных при запуске Vim, и генерирует псевдослучайное число на основе вычислений и перестановок, примененных к начальным значениям:
Область видимости переменных объявлена как глобальная, потому что они используются функцией генератора, но могут быть ограничены сценарием (
s:
)А вот и функция генератора:
Репо включает в себя следующие функции:
Вот быстрый тест, который я написал для тестирования генератора: я сгенерировал 1000000 чисел от 0 до 9 и посчитал количество вхождений каждого числа, вот результаты:
Как вы можете видеть, поколение, кажется, хорошо распределено. Я знаю, что этого недостаточно для тестирования генератора случайных чисел, поэтому я попытаюсь провести дополнительный анализ, если у меня будет немного свободного времени.
источник
Этот метод найден в плагине vim-randomtag , который основан на чтении ... микросекунд текущего времени, который можно использовать, когда вам просто нужно какое-то число, вас не волнует качество случайности или проблемы с безопасностью и т. Д .:
источник
Vim не предлагает собственный генератор случайных чисел, однако если у вас есть vim, скомпилированный с Python, следующий метод добавит случайную цифру в конце вашей строки:
Примечание: чтобы проверить, поддерживает ли ваш vim Python, попробуйте:
:echo has('python')
(1 для да).Вы также можете использовать оболочку, которая предлагает
$RANDOM
переменную (работает с bash / ksh / zsh), которая возвращает псевдослучайный (0-32767), например:или:
или:
В Windows вы должны установить Cygwin / MSYS / SUA или использовать
%RANDOM%
переменную, как рекомендует Carpetsmoker .Если у вас нет доступа к shell и Python, как в случае обходного пути, вы используете последние несколько цифр из текущей отметки времени, например:
Примечание: если вы используете его довольно часто, напишите простую функцию, которая будет
return reltimestr(reltime())[-4:]
.Чтобы добавить больше случайных чисел, нажмите, @:чтобы повторить команду еще раз. Или префикс с номером (например 10@:), чтобы добавить гораздо больше случайных чисел, разделенных новыми строками.
Связанный:
источник
zsh
, но не сsh
,dash
,fish
,csh
, илиtcsh
... Вы можете использовать:r! bash -c 'echo $RANDOM'
...GetRandom()
функцию, где хороший prng имеет значение, поэтому лучше, если это возможно, получить его с самого начала (а это почти всегда возможно!)$RANDOM
, но если это плохой PRNG, то это не повод использовать еще более слабый PRNG :-) Вместо этого, обновите его до лучшего PRNG! Насколько я знаю,/dev/urandom
он доступен на всех платформах, гдеbash
он широко доступен, поэтому я не вижу причин не использовать его.$RANDOM
. Похоже, очень хороший маленький инструмент, и, хотя это может быть "RNG бедного человека" (как указывает @Carpetsmoker), он определенно соответствует требованию @ kenorb (который задал вопрос) "легко запоминающимся".Вы можете использовать
rand()
иsrand()
функцию, при условии , ваш Vim двоичный включает патч 8.1.2342 .Например, для генерации 10 случайных чисел, разделенных символами новой строки:
Чтобы сгенерировать 10 случайных чисел, все уступающие 100:
Чтобы сгенерировать 10 случайных алфавитных строк из 5 символов:
Чтобы сгенерировать 10 случайных слов (взятых из файла словаря
/usr/share/dict/words
):Для генерации 10 последовательностей из 5 случайных слов:
Для генерации случайного UUID версии 4:
Чтобы применить случайную цветовую схему:
источник
Я не думаю, что есть собственная функция для случайных чисел в Vimscript.
Способ использования
:python
(используйте его в функции, возможно, с заменой 10000 и 60 параметрами):Смотрите мой ответ на Создание коробки в vim через python для краткого введения в скрипты Python в Vim.
Поскольку
vim.current.buffer
это список строк, мы можем назначить ему список строк так же, как в Python.random.sample
это просто самый простой способ, которым я могу придумать, получить список случайных целых чисел в Python.источник
random.sample
восстанавливает только два аргумента в Python 2,str
это встроенная функция для преобразования вещей в строки. Позвольте мне посмотреть эквиваленты Py3 (str
будет то же самое, придется проверитьxrange
иrandom.sample
).xrange
не в Python3, потому чтоrange
это эквивалентно (ни один из них фактически не создает список, в отличие отrange
Py2).map
в Py3 возвращается итеративный, а не список, поэтому будет использоваться последняя строкаlist(map(str, random.sample(range(10000), 60)))