Me gustaría generar uno o pocos números aleatorios separados por una nueva línea.
¿Cómo se puede hacer esto?
text-generation
kenorb
fuente
fuente
:python
?Respuestas:
No hay una función integrada para esto, por lo que deberá usar algo externo.
Shell de UNIX (
/bin/sh
)Vocación:
con
system()
es una buena manera. Solo puede obtener números reemplazándolostr
congrep
:Puedes usar esto en Vim así:
El número 15 es la cantidad de números que desea (ajuste en consecuencia). Esto debería funcionar en Linux, BSD, OSX y otros sistemas UNIX. No funcionará en MS Windows.
También vea mi publicación en el blog " Generar contraseñas desde la línea de comandos " (hay muchas soluciones malas para esto).
Rubí
Ruby es probablemente la siguiente mejor opción, ya que las secuencias de comandos de Ruby parecen ser un poco más comunes que las de Python. Obtener un número aleatorio es fácil:
O para obtener 15 números:
Pitón
Puedes usar el módulo aleatorio ; para obtener un solo número:
O un 15 números:
Esto debería funcionar para Python 2 y 3.
Windows PowerShell
Puedes usar
Get-Random
para obtener un número aleatorio:Ventanas
cmd.exe
Windows 7 y versiones posteriores deben enviarse con PowerShell, pero si desea la máxima compatibilidad, puede usarlas
cmd.exe
. Tiene una variable especial%RANDOM%
:Nota: ¡ Esto no es muy aleatorio! , usa el tiempo (!)
Tenga en cuenta que no necesita usar los enlaces Ruby o Python para usar las soluciones Ruby o Python; también podría crear un script separado y llamarlos con
system("python -c '...'")
(esto requiere que ruby / python esté instalado, obviamente).fuente
tr -d '[:space:]'
, tal veztr -cd '[:digit:]'
para el filtro grep?:r! hexdump -n $((3*4)) -e '"%d"' /dev/urandom
, generaría 3 enteros con signo aleatorio.:r! hexdump -n $((3*4)) -e '"\%d\n"' /dev/urandom
Aquí hay una solución vimscript pura . No lo creé, fue desarrollado por Charles E. Campbell. Puede encontrar un repositorio de Github con su código aquí .
El algoritmo utiliza 3 semillas generadas en el inicio de Vim y genera un número pseudoaleatorio basado en cálculos y permutaciones aplicadas a las semillas:
El alcance de las variables se declara como global porque son utilizadas por la función del generador pero podrían estar restringidas al script (
s:
)Y aquí está la función del generador:
El repositorio incluye las siguientes funciones:
Aquí hay una prueba rápida que escribí para probar el generador: generé 1000000 números entre 0 y 9 y conté el número de ocurrencias de cada número, aquí están los resultados:
Como puede ver, la generación parece estar bien distribuida. Soy consciente de que esto no es suficiente para probar un generador aleatorio, así que intentaré hacer un análisis adicional si tengo algo de tiempo libre.
fuente
Este es un método que se encuentra en el complemento vim-randomtag , que se basa en la lectura ... microsegundos de tiempo actual, utilizable cuando solo desea un número, no le importa mucho la calidad de la aleatoriedad o tiene problemas de seguridad, etc.
fuente
Vim no ofrece un generador aleatorio nativo, sin embargo, si ha compilado vim con Python, el siguiente método agregará un dígito aleatorio al final de su línea:
Nota: Para verificar si su vim es compatible con Python, intente:
:echo has('python')
(1 para sí).También puedes usar shell que ofrece
$RANDOM
variables (funciona con bash / ksh / zsh) que devuelve un pseudoaleatorio (0-32767), por ejemplo:o:
o:
En Windows, debe tener instalado Cygwin / MSYS / SUA, o utilizar
%RANDOM%
variables como sugirió Carpetsmoker .Si no tiene acceso a Shell y Python, como solución alternativa, use los últimos dígitos de la marca de tiempo actual, por ejemplo:
Nota: Si lo usa con bastante frecuencia, escriba una función simple que
return reltimestr(reltime())[-4:]
.Para agregar más números aleatorios, presione @:para repetir el comando nuevamente. O prefijo con número (como10@: ) para agregar muchos más números aleatorios separados por nuevas líneas.
Relacionado:
fuente
zsh
, pero no consh
,dash
,fish
,csh
, otcsh
... Usted podría utilizar:r! bash -c 'echo $RANDOM'
...GetRandom()
función en la que buena PRNG hace la materia, por lo que es mejor simplemente hacer las cosas bien desde el principio, si es posible (y es casi siempre es posible aquí!)$RANDOM
, pero si este es un PRNG pobre, entonces esa no es una razón para usar un PRNG aún más pobre :-) En su lugar, ¡actualice a un PRNG mejor! Hasta donde sé,/dev/urandom
está disponible en todas las plataformas dondebash
está comúnmente disponible, por lo que no veo una razón para no usarlo.$RANDOM
. Parece una pequeña herramienta muy agradable, y aunque puede ser un "RNG de hombre pobre" (como señala @Carpetsmoker), definitivamente se ajusta al requisito de "kenorb (que hizo la pregunta) de" fácilmente memorable ".Puede usar las funciones
rand()
ysrand()
, siempre que su binario Vim incluya el parche 8.1.2342 .Como ejemplo, para generar 10 números aleatorios separados por nuevas líneas:
Para generar 10 números aleatorios todos inferiores a 100:
Para generar 10 cadenas alfabéticas aleatorias de 5 caracteres:
Para generar 10 palabras al azar (tomadas del archivo del diccionario
/usr/share/dict/words
):Para generar 10 secuencias de 5 palabras al azar:
Para generar un UUID aleatorio versión 4:
Para aplicar un esquema de color aleatorio:
fuente
No creo que haya una función nativa para números aleatorios en Vimscript.
Una forma de usar
:python
(usarlo en una función, tal vez, con 10000 y 60 reemplazados por parámetros):Vea mi respuesta a Hacer un cuadro en vim a través de python para una introducción rápida sobre las secuencias de comandos de Python en Vim.
Como
vim.current.buffer
es una lista de cadenas, podemos asignarle una lista de cadenas de la misma forma que lo haríamos en Python.random.sample
es la forma más simple en que puedo pensar para obtener una lista de enteros aleatorios en Python.fuente
random.sample
tiene solo dos argumentos en Python 2,str
es la función integrada para convertir cosas en cadenas. Permítanme buscar los equivalentes de Py3 (str
sería lo mismo, tendré que verificarxrange
yrandom.sample
).xrange
no está en Python3 porquerange
es equivalente (ninguno construye una lista, a diferenciarange
de Py2).map
en Py3 devuelve un iterable y no una lista, por lo que la última línea usaríalist(map(str, random.sample(range(10000), 60)))