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.
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:
Verwenden :put
und range()
:
:put =range(1,100)
Um die Leerzeile oben zu vermeiden ( Kudos zu Romainl ), verwenden Sie :0put
:
:0put =range(1,100)
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 seq
die Ausgabe des Puffers .
Dies ist nützlich, wenn Sie bereits mit einer Befehlszeilenmethode vertraut sind, mit der Sie das Gewünschte erreichen können.
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:
i1<Esc>
- Geben Sie die Nummer 1 ein und kehren Sie in den Befehlsmodus zurückqa
- Aufzeichnung eines Makros im Register "a" startenY
- kopiere die aktuelle Zeilep
- füge die aktuelle Zeile ein (der Cursor bewegt sich auch auf die eingefügte Zeile)<Ctrl>a
- Inkrementiere die nächste Zahl in der Zeile und mache es 2q
- Aufzeichnung des Makros beenden (war Register "a")98@a
- Das Makro in Register "a" 98 mal abspielenHier 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
:h g_CTRL-A
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.
<C-r>=range(1,100)
.