Wie kann ich eine Liste von fortlaufenden Nummern erstellen, eine pro Zeile?


38

Wie kann ich ausgehend von einer leeren Tafel ein Dokument erhalten, das Folgendes enthält?

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

Ich möchte nicht, dass diese Zahlen am Rand angezeigt werden. Ich möchte, dass sie in das Dokument selbst eingefügt werden.

Antworten:



18

Zusätzlich zu Undos pure-vim :put =range(1,100)(was Sie tatsächlich mit einem leeren Zeilenumbruch belässt) können Sie abhängig von Ihrem Betriebssystem einen seiner Befehle verwenden. ZB auf einer Unix / Linux-Box:

%!seq 1 100

Das obige funktioniert, indem der gesamte (leere) Puffer an weitergeleitet wird seq, der seine Eingabe ignoriert und nur die Zahlen 1 bis 100 ausgibt. Vim ersetzt dann den gesamten Puffer durch seqdie Ausgabe des Puffers .

Dies ist nützlich, wenn Sie bereits mit einer Befehlszeilenmethode vertraut sind, mit der Sie das Gewünschte erreichen können.


Dies "entlarvt" die Frage, weshalb ich denke, dass es besser ist als die akzeptierte. Ja, Sie können vim dazu bringen, die Arbeit zu erledigen, genauso wie Sie einen Gabelschlüssel zum Rühren der Suppe verwenden können. Vim ist ein Texteditor, kein beliebiger Textgenerator. Dafür gibt es viel offensichtlichere Werkzeuge.
msw

16

Für die Aufzeichnung und definitiv nicht der kürzeste Weg (siehe @ Undos großartige Lösung), aber eine Folge von Tastenanschlägen wird es auch tun:

i1EscqaYpCtrl+aq98@a

Lassen Sie mich das für Sie aufschlüsseln:

  1. i1<Esc> - Geben Sie die Nummer 1 ein und kehren Sie in den Befehlsmodus zurück
  2. qa - Aufzeichnung eines Makros im Register "a" starten
  3. Y - kopiere die aktuelle Zeile
  4. p - füge die aktuelle Zeile ein (der Cursor bewegt sich auch auf die eingefügte Zeile)
  5. <Ctrl>a - Inkrementiere die nächste Zahl in der Zeile und mache es 2
  6. q - Aufzeichnung des Makros beenden (war Register "a")
  7. 98@a - Das Makro in Register "a" 98 mal abspielen

4

Hier ist ein anderer Ansatz, der ein neueres Vim benötigt (so etwas wie 7.4.800)

Dies setzt einen leeren Puffer und '1' in Register a voraus. Geben Sie zuerst 100 1 in Ihren Puffer ein "a100P.

Wählen Sie dann visuell die Zeilen 2 bis 100 aus :2EnterVG.

Drücken Sie jetzt gCtrl+ A.

Lesen Sie die Hilfe unter :h v_g_CTRL-A


Sie müssen let @ a = "1" in Ihre Antwort einfügen. Anfänger könnten stecken bleiben, um herauszufinden, wie Wert 1 in Register a gespeichert wird.
SibiCoder

Ich habe die Strg + A-Kombination in anderen ähnlichen Lösungen gesehen. Ich konnte jedoch keine Erklärung dafür finden, was es tut / wie es funktioniert. Haben Sie einen Verweis in der Dokumentation, der erklärt, was g tut? Vielen Dank! Wenn ich eine Erklärung finde, werde ich sie posten.
CodingFoo

1
Dokumentation ist um:h g_CTRL-A
Christian Brabandt

Ich hatte den Link zum Abschnitt v_g_CTRL-A verpasst.
CodingFoo

2

Ich weiß, diese Frage ist wirklich alt, aber es gibt auch eine andere Möglichkeit, dies zu tun. Versuche dies:

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

99o<esc>öffnet nur 100 Leerzeilen. Dann führen wir einen Ersatzbefehl aus:

:%                  " On every line
  s/                " substitute
    ^/              " the start of the line. (This will always match no matter what)
      \=            " Evaluate:
        line('.')   " The current line.
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.