Gostaria de gerar um ou alguns números aleatórios separados por nova linha.
Como isso pode ser feito?
text-generation
kenorb
fonte
fonte
:python
?Respostas:
Não há um recurso interno para isso, então você precisará usar algo externo.
Shell UNIX (
/bin/sh
)A ligar:
com
system()
é um bom caminho. Você pode obter apenas números substituindotr
porgrep
:Você pode usar isso no Vim assim:
O número 15 é a quantidade de números que você deseja (ajuste de acordo). Isso deve funcionar no Linux, BSD, OSX e outros sistemas UNIX. Não vai funcionar no MS Windows.
Veja também o meu blog " Gerar senhas a partir da linha de comando " (existem muitas soluções ruins para isso).
Rubi
Ruby é provavelmente a próxima melhor opção, pois os scripts Ruby parecem ser um pouco mais comuns que os scripts Python. Obter um número aleatório é fácil:
Ou para obter 15 números:
Python
Você pode usar o módulo aleatório ; para obter um único número:
Ou 15 números:
Isso deve funcionar para o Python 2 e 3.
Windows PowerShell
Você pode usar
Get-Random
para obter um número aleatório:janelas
cmd.exe
O Windows 7 e posterior devem ser fornecidos com o PowerShell, mas se você quiser compatibilidade máxima, poderá usá-lo
cmd.exe
. Tem uma variável especial%RANDOM%
:Nota: Isso não é muito aleatório! , usa o tempo (!)
Observe que você não precisa usar as ligações Ruby ou Python para usar as soluções Ruby ou Python; você também pode criar um script separado e chamá-lo com
system("python -c '...'")
(isso requer que o ruby / python esteja instalado, obviamente.fonte
tr -d '[:space:]'
, talveztr -cd '[:digit:]'
para o filtro grep?:r! hexdump -n $((3*4)) -e '"%d"' /dev/urandom
, geraria 3 números inteiros assinados aleatoriamente.:r! hexdump -n $((3*4)) -e '"\%d\n"' /dev/urandom
Aqui está uma solução pura para vimscript . Eu não o criei, ele foi desenvolvido por Charles E. Campbell. Você pode encontrar um repositório do Github com seu código aqui .
O algoritmo usa 3 sementes geradas na inicialização do Vim e gera um número pseudo-aleatório com base nos cálculos e permutações aplicados às sementes:
O escopo das variáveis é declarado como global porque é usado pela função do gerador, mas pode ser restrito ao script (
s:
)E aqui está a função do gerador:
O repo inclui as seguintes funções:
Aqui está um teste rápido que escrevi para testar o gerador: gerei 1000000 números entre 0 e 9 e contei o número de ocorrências de cada número. Aqui estão os resultados:
Como você pode ver, a geração parece estar bem distribuída. Estou ciente de que isso não é suficiente para testar um gerador aleatório, então tentarei fazer uma análise extra se tiver algum tempo livre.
fonte
Este é um método encontrado no plug - in vim-randomtag , baseado na leitura ... microssegundos para o horário atual, utilizável quando você deseja apenas um número, não se importa muito com a qualidade da aleatoriedade ou se preocupa com a segurança, etc .:
fonte
O Vim não oferece gerador aleatório nativo; no entanto, se você tiver o vim compilado com Python, o método a seguir anexará um dígito aleatório no final da sua linha:
Nota: Para verificar se o seu vim suporta Python, tente:
:echo has('python')
(1 para sim).Você também pode usar o shell que oferece
$RANDOM
variável (funciona com bash / ksh / zsh) que retorna um pseudo-aleatório (0-32767), por exemplo:ou:
ou:
No Windows, você deve ter o Cygwin / MSYS / SUA instalado ou usar a
%RANDOM%
variável conforme sugerido por Carpetsmoker .Se você não tem acesso ao shell e ao Python, como solução alternativa, use os últimos dígitos do carimbo de data / hora atual, por exemplo:
Nota: Se você o estiver usando com bastante frequência, escreva uma função simples que sim
return reltimestr(reltime())[-4:]
.Para adicionar mais números aleatórios, pressione @:para repetir o comando novamente. Ou prefixe com number (like 10@:) para adicionar muito mais números aleatórios separados por novas linhas.
Palavras-chave:
fonte
zsh
, mas não comsh
,dash
,fish
,csh
, outcsh
... Você pode usar:r! bash -c 'echo $RANDOM'
...GetRandom()
função onde a boa impressão é importante, por isso é melhor acertar desde o início, se possível (e quase sempre é possível aqui!)$RANDOM
, mas se esse é um PRNG ruim, não é uma razão para usar um PRNG ainda mais pobre :-) Em vez disso, atualize para um PRNG melhor! Tanto quanto eu sei,/dev/urandom
está disponível em todas as plataformas ondebash
está comumente disponível, então não vejo um motivo para não usá-lo.$RANDOM
. Parece uma pequena ferramenta muito boa, e mesmo que seja um "RNG do pobre" (como aponta a @Carpetsmoker), definitivamente se encaixa no requisito de "facilmente memorável" do @ kenorb (que fez a pergunta).Você pode usar as funções
rand()
esrand()
, desde que o seu binário Vim inclua o patch 8.1.2342 .Como exemplo, para gerar 10 números aleatórios separados por novas linhas:
Para gerar 10 números aleatórios, todos inferiores a 100:
Para gerar 10 seqüências alfabéticas aleatórias de 5 caracteres:
Para gerar 10 palavras aleatórias (extraídas do arquivo do dicionário
/usr/share/dict/words
):Para gerar 10 sequências de 5 palavras aleatórias:
Para gerar uma versão UUID aleatória 4:
Para aplicar um esquema de cores aleatório:
fonte
Eu não acho que exista uma função nativa para números aleatórios no Vimscript.
Uma maneira de usar
:python
(use-o em uma função, talvez, com 10000 e 60 substituídos por parâmetros):Veja minha resposta para Criando uma caixa no vim via python para uma rápida introdução sobre scripts em Python no Vim.
Como
vim.current.buffer
é uma lista de cadeias de caracteres, podemos atribuir uma lista de cadeias de caracteres da mesma maneira que atribuiríamos no Python.random.sample
é apenas a maneira mais simples de obter uma lista de números inteiros aleatórios em Python.fonte
random.sample
exige apenas dois argumentos no Python 2,str
é a função interna de converter coisas em strings. Deixe-me procurar os equivalentes Py3 (str
seria o mesmo, terá que verificarxrange
erandom.sample
).xrange
não está no Python3 porquerange
é equivalente (nem na verdade constrói uma lista, ao contráriorange
do Py2).map
em PY3 retorna um iterável e não uma lista, para a última linha usarialist(map(str, random.sample(range(10000), 60)))