Come posso generare un elenco di numeri sequenziali, uno per riga?


38

A partire da una lavagna vuota, come posso ottenere un documento che contiene

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

Per essere chiari, non voglio che questi numeri vengano visualizzati a margine; Li voglio inseriti nel documento stesso.

Risposte:



18

Oltre a pure-vim di Undo :put =range(1,100)(che in realtà ti lascia con una riga vuota in alto), puoi, a seconda del tuo sistema operativo, utilizzare uno dei suoi comandi. Ad esempio, su una scatola Unix / Linux:

%!seq 1 100

Quanto sopra funziona eseguendo il piping dell'intero buffer (vuoto) a seq, che ignora il suo input e genera solo i numeri da 1 a 100. Vim quindi sostituisce l'intero buffer con seql'output.

È utile quando hai già familiarità con un modo da riga di comando per ottenere ciò che desideri.


Questo "smentisce" la domanda ed è per questo che penso sia migliore di quella accettata. Sì, puoi fare in modo che Vim faccia il suo lavoro, così come puoi usare una chiave a mezzaluna per mescolare la zuppa. Vim è un editor di testo, non un generatore di testo arbitrario; ci sono strumenti molto più ovvi per questo.
msw,

16

Per la cronaca, e sicuramente non il modo più breve (vedi la fantastica soluzione di @ Undo), ma lo farà anche la sequenza di tasti:

i1EscqaYpCtrl+aq98@a

Lascia che lo scomponga per te:

  1. i1<Esc> - inserisci il numero 1, quindi torna alla modalità comando
  2. qa - avvia la registrazione di una macro nel registro "a"
  3. Y - copia la riga corrente
  4. p - incolla la linea corrente (il cursore si sposterà anche sulla linea incollata)
  5. <Ctrl>a - incrementa il numero successivo sulla riga, rendendolo 2
  6. q - interrompere la registrazione della macro (era registro "a")
  7. 98@a - riprodurre la macro nel registro "a" 98 volte

5

Ecco un approccio diverso, che ha bisogno di un Vim più recente (qualcosa come 7.4.800)

Ciò presuppone un buffer vuoto e '1' nel registro a. In primo luogo immettere 100 1 nel buffer, "a100P.

Quindi selezionare visivamente le righe da 2 a 100 :2EnterVG.

Ora premi gCtrl+ A.

Leggi l'aiuto a :h v_g_CTRL-A


Devi aggiungere let @ a = "1" nella tua risposta. I principianti potrebbero rimanere bloccati per scoprire come memorizzare il valore 1 nel registro a.
SibiCoder,

Ho visto la combinazione gCtrl + A in altre soluzioni simili. Tuttavia non sono stato in grado di trovare una spiegazione di cosa sta facendo / come funziona? Hai un riferimento nella documentazione che spiega cosa fa g? Grazie! Se trovo una spiegazione, la posterò.
coding:

1
la documentazione è disponibile presso:h g_CTRL-A
Christian Brabandt,

Avevo perso il collegamento alla sezione v_g_CTRL-A.
coding:

2

So che questa domanda è molto vecchia, ma c'è anche un altro modo per farlo. Prova questo:

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

99o<esc>aprirà solo 100 righe vuote. Quindi, eseguiamo un comando sostitutivo:

:%                  " On every line
  s/                " substitute
    ^/              " the start of the line. (This will always match no matter what)
      \=            " Evaluate:
        line('.')   " The current line.
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.