Frage

Wie kann ich die Zeilennummern auf einen Bereich von Zeilen in Vim? Nicht wie in „: set nu.“ - dies nur Zahlen zeigt, aber nicht fügen Sie sie nicht in die Datei

War es hilfreich?

Lösung

Mit

:%s/^/\=line('.')/

EDIT: um die Kommentare zusammenzufassen.

Dieser Befehl kann so viel gezwickt werden, wie Sie wollen.


Angenommen, Sie Nummern hinzufügen möchten vor Zeilen aus einer visuellen Auswahl (V + move), und Sie wollen, dass die Nummerierung bei 42 beginnen.

:'<,'>s/^/\=(line('.')-line("'<")+42)/

Wenn Sie eine Zeichenfolge zwischen der Zahl und dem alten Text aus der Zeile hinzufügen, verketten nur (mit . in VimL), um die Anzahl Ausdruck:

:'<,'>s/^/\=(line('.')-line("'<")+42).' --> '/

Wenn Sie diese benötigen als Text zu sortieren, können Sie auf Null Pad die Ergebnisse möchten, die mit printf für 0001, 0002 getan werden kann ... statt 1, 2 ... zB:

:%s/^/\=printf('%04d', line('.'))/

Wie auch immer, wenn Sie weitere Informationen wünschen, öffnen Sie einfach vim Hilfe: :h :s und folgen Sie den Links (|subreplace-special|, ..., |submatch()|)

Andere Tipps

cat -n fügt Zeilennummern an seinem Eingang. Sie können die aktuelle Datei Rohr cat -n und den aktuellen Puffer ersetzen mit dem, was er druckt auf stdout. Glücklicherweise ist diese gewundene Lösung weniger als 10 Zeichen in vim:

 :%!cat -n

Oder, wenn Sie nur ein subselection wollen, visuell den Bereich auswählen, und geben Sie diese:

 :!cat -n

Das wird automatisch die visuellen Selektionsmarker in setzen und wird so aussehen, nachdem Sie es eingegeben haben:

 :'<,'>!cat -n

Um die Zeilennummern zu löschen, empfehle ich control-v, die es Ihnen erlaubt, visuell ein Rechteck auswählen, können Sie dann das Rechteck löschen mit x.

Auf einem GNU-System: mit der externen nl binär:

:%!nl

Mit Unix-ähnliche Umgebung, können Sie Katze oder awk verwenden, um eine Zeilennummer leicht zu erzeugen, weil vim eine benutzerfreundliche Oberfläche mit Shell hat, so ist alles Arbeit in vim sowie es in der Schale der Fall ist.
Aus Vim Tip28 :

:%!cat -n

oder

:%!awk '{print NR,$0}'

Aber, wenn Sie vim in MS-DOS verwenden, von win9x, Win2000, Verlust Sie diese Toolkits. hier ist eine sehr einfache Möglichkeit, dies zu archivieren nur von vim:

fu! LineIt()
  exe ":s/^/".line(".")."/"
endf

oder eine Sequenz mit Alphabet zusammengesetzt ist so einfach wie oben:

exe "s/^/".nr2char(line("."))."/" 

Sie können auch eine subst verwenden:

:g/^/exe ":s/^/".line(".")."^I/"

Sie können auch wollen nur die Linien drucken, ohne sie in die Datei hinzufügen:

  

"Manchmal könnte es nützlich sein, vor allem große Quelldateien seines Bearbeiten der Zeilennummern auf Papier zu drucken.
  Um dies zu tun können Sie die Option :set printoptions=number:y verwenden zu aktivieren und :set printoptions=number:n diese Funktion zu deaktivieren.
  Wenn die Zeilennummer sollte immer gedruckt werden, legen Sie die Linie set printoptions=number:y im vimrc.“

Als erstes können Sie die vorhandenen Zeilennummern entfernen, wenn Sie benötigen:

:%s/^[0-9]*//

Dann können Sie Zeilennummern hinzufügen. NR bezieht sich auf die aktuelle Zeilennummer an einem Start, so dass Sie auf es einige Mathe tun das bekommen Nummerierung Sie wollen. Der folgende Befehl gibt Ihnen vierstellige Zeilennummern:

:%!awk '{print 1000+NR*10,$0}'

Die "VisIncr" Plugin ist gut für das Einfügen von Spalten erhöhenden Nummern im allgemeinen (oder Buchstaben, Daten, römische Ziffern etc.). Sie können das Zahlenformat, Polsterung, Kontrolle und so weiter. So legen Sie eine „1“ vor jeder Zeile (über :s oder :g oder visuell-Block Einsatz), markieren Sie die Spalte in visual-Block-Modus und einen der Befehle aus dem Plugin ausgeführt werden.

Wenn jemand will, eine Registerkarte setzen (oder einige Leerzeichen), nachdem sie die Zeilennummern Einfügen des mit diesem ausgezeichneten Antwort , hier ist auch ein Weg. Nachdem er in die Flucht-Modus tun:

:%s/^/\=line('.').'    '/

^ bedeutet Anfang einer Zeile und %s ist die Richtlinie für die Substitution. Also, sagen wir, dass eine Zeilennummer am Anfang jeder Zeile setzen und fügt 4 Leerzeichen, um es dann, was auch immer setzen die Inhalte der Zeile vor der Substitution waren, und tut dies für alle Zeilen in der Datei.

Dies wird es automatisch ersetzen. wenn Sie den Befehl zu fragen Sie nach der Bestätigung von Ihnen Alternativ wollen, dann tun:

:%s/^/\=line('.').'    '/igc

P. S: Macht der vim :)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top