Comment puis-je générer une liste de numéros séquentiels, un par ligne?

38

À partir d’une ardoise vierge, comment puis-je obtenir un document contenant

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

Pour être clair, je ne veux pas que ces chiffres soient affichés dans la marge; Je veux les insérer dans le document lui-même.

200_success
la source

Réponses:

51

Utiliser :putet range():

:put =range(1,100)

Pour éviter la ligne blanche en haut ( félicitations à romainl ), utilisez :0put:

:0put =range(1,100)
annuler
la source
1
Ou en mode insertion avec <C-r>=range(1,100).
Hotschke
18

En plus du pure-vim de Undo :put =range(1,100)(qui vous laisse en réalité avec une ligne vide en haut), vous pouvez, en fonction de votre système d'exploitation, utiliser l'une de ses commandes. Par exemple, sur une machine Unix / Linux:

%!seq 1 100

Ce qui précède fonctionne en canalisant le tampon entier (vide) vers seq, ce qui ignore son entrée et ne sort que les nombres de 1 à 100. Vim remplace alors tout le tampon par seqla sortie de.

C'est utile lorsque vous êtes déjà familiarisé avec un moyen en ligne de commande d'obtenir ce que vous voulez.

derobert
la source
Ceci "décoiffe" la question, c'est pourquoi je pense que c'est mieux que ce qui est accepté. Oui, vous pouvez faire en sorte que vim fasse le travail, tout comme vous pouvez utiliser une clé à molette en forme de croissant pour mélanger la soupe. Vim est un éditeur de texte et non un générateur de texte arbitraire. il existe des outils bien plus évidents pour cela.
msw
16

Pour mémoire, et certainement pas le moyen le plus court (voir la solution géniale de @ Undo), mais une séquence de frappe suffira également:

i1EscqaYpCtrl+aq98@a

Laissez-moi vous en parler:

  1. i1<Esc> - insère le chiffre 1, puis retourne en mode commande
  2. qa - commencer à enregistrer une macro dans le registre "a"
  3. Y - copier la ligne en cours
  4. p - coller la ligne en cours (le curseur se déplacera également vers la ligne collée)
  5. <Ctrl>a - incrémente le nombre suivant sur la ligne, le faisant 2
  6. q - arrêter d'enregistrer la macro (le registre "a" était-il)
  7. 98@a - rejouer la macro dans le registre "a" 98 fois
Arrêtez le mal en cours à Monica
la source
5

Voici une approche différente, qui nécessite un nouveau Vim (quelque chose comme 7.4.800)

Cela suppose un tampon vide et «1» dans le registre a. Entrez d' abord 100 1 dans votre tampon, "a100P.

Puis sélectionnez visuellement les lignes 2 à 100 :2EnterVG.

Maintenant, appuyez sur gCtrl+ A.

Lisez l'aide à :h v_g_CTRL-A

Christian Brabandt
la source
Vous devez ajouter let @ a = "1" dans votre réponse. Les débutants pourraient être coincés pour trouver comment stocker la valeur 1 dans le registre a.
SibiCoder
J'ai vu la combinaison gCtrl + A dans d'autres solutions similaires. Cependant, je n'ai pas pu trouver d'explication sur ce qu'il fait / comment ça marche? Avez-vous une référence dans la documentation qui explique ce que g fait? Merci! Si je trouve une explication, je la posterai.
codingFoo
1
la documentation est à:h g_CTRL-A
Christian Brabandt
J'avais manqué le lien vers la section v_g_CTRL-A.
codingFoo
2

Je sais que cette question est vraiment ancienne, mais il y a une autre façon de le faire aussi. Essaye ça:

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

99o<esc>ouvrira simplement 100 lignes vierges. Ensuite, nous lançons une commande de substitution:

:%                  " On every line
  s/                " substitute
    ^/              " the start of the line. (This will always match no matter what)
      \=            " Evaluate:
        line('.')   " The current line.
DJMcMayhem
la source