Como posso gerar uma lista de números sequenciais, um por linha?


38

A partir de uma folha em branco, como posso obter um documento que contém

1
2
3
4
5
6
7
8
9
10
…
100

Para ser claro, não quero que esses números sejam exibidos na margem; Quero que eles sejam inseridos no próprio documento.

Respostas:



18

Além do pure-vim do Undo :put =range(1,100)(que na verdade deixa uma linha em branco no topo), você pode, dependendo do sistema operacional, usar um de seus comandos. Por exemplo, em uma caixa Unix / Linux:

%!seq 1 100

O procedimento acima funciona canalizando todo o buffer (vazio) para seq, o que ignora sua entrada e apenas gera os números de 1 a 100. O Vim substitui todo o buffer pela seqsaída.

Isso é útil quando você já está familiarizado com alguma maneira da linha de comando de obter o que deseja.


Isso "desarma" a questão, e é por isso que acho que é melhor que a aceita. Sim, você pode fazer com que o vim faça o trabalho, assim como você pode usar uma chave inglesa para mexer a sopa. O Vim é um editor de texto, não um gerador de texto arbitrário; existem ferramentas muito mais óbvias para isso.
msw

16

Para o registro, e definitivamente não é o caminho mais curto (consulte a incrível solução do @ Undo), mas a sequência de pressionamentos de tecla também o fará:

i1EscqaYpCtrl+aq98@a

Deixe-me explicar isso para você:

  1. i1<Esc> - insira o número 1 e volte ao modo de comando
  2. qa - comece a gravar uma macro no registro "a"
  3. Y - copie a linha atual
  4. p - cole a linha atual (o cursor também se moverá para a linha colada)
  5. <Ctrl>a - incremente o próximo número na linha, tornando-o 2
  6. q - pare de gravar a macro (foi registrada "a")
  7. 98@a - repita a macro no registro "a" 98 vezes

5

Aqui está uma abordagem diferente, que precisa de um Vim mais recente (algo como 7.4.800)

Isso pressupõe um buffer vazio e '1' no registro a. Primeiro, digite 100 1 no seu buffer "a100P,.

Em seguida, selecione visualmente as linhas 2 a 100 :2EnterVG.

Agora pressione gCtrl+ A.

Leia a ajuda em :h v_g_CTRL-A


Você precisa adicionar let @ a = "1" na sua resposta. Os iniciantes podem ficar paralisados ​​para descobrir como armazenar o valor 1 no registro a.
SibiCoder 28/05

Eu já vi o combo gCtrl + A em outras soluções semelhantes. No entanto, não consegui encontrar uma explicação do que está fazendo / como funciona? Você tem uma referência na documentação que explica o que g faz? Obrigado! Se eu encontrar uma explicação, eu a postarei.
código é o seguinte

11
documentação está em:h g_CTRL-A
Christian Brabandt 16/09/16

Eu tinha perdido o link para a seção v_g_CTRL-A.
CodigoFoo

2

Sei que essa pergunta é realmente antiga, mas há outra maneira de fazer isso também. Tente o seguinte:

99o<esc>:%s/^/\=line('.')<cr>

99o<esc>abrirá apenas 100 linhas em branco. Em seguida, executamos um comando substituto:

:%                  " On every line
  s/                " substitute
    ^/              " the start of the line. (This will always match no matter what)
      \=            " Evaluate:
        line('.')   " The current line.
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.