Ich nutze vim in der Regel nicht, bin da also nicht fit drin. Jetzt möchte ich, wie in der Überschrift angegeben, eine Datei bearbeiten, für die vim eventuell hilfreich sein könnte. Könnte mir jemand sagen, was für ein Kommando man in vim eingeben muss, um die obige Aufgabe durchzuführen? Sagen wir mal n ist 120 und m ist Zeilennummer 180.
1 | :120,180s/^/ /g |
Hmmm schrieb: > :120,180s/^/ /g Besten Dank. Das hat wunderbar geklappt. Jetzt würde mich noch interessieren, was die einzelnen Abschnitte bedeuten: Also "s" "/^" "/ " ich schätze mal, das baut das einzufügende Zeichen ein, in dem Fall ein Leerzeichen. "/g"
Nano schrieb: > Jetzt würde mich noch interessieren, was die einzelnen Abschnitte > bedeuten: > Also > "s" Search. > "/^" / beginnt die zu suchende Regular Expression, ^ ist der Zeilenanfang. Mit $ kannst Du übrigens das Zeilenende matchen. > "/ " ich schätze mal, das baut das einzufügende Zeichen ein, in dem Fall > ein Leerzeichen. Genau. > "/g" Global, also nicht nur den ersten Match ersetzen.
Hmmm schrieb: > Global, also nicht nur den ersten Match ersetzen. Was bei ^ am Anfang vom Pattern zwar nicht schadet, aber sinnfrei ist.
(prx) A. K. schrieb: > Hmmm schrieb: > Global, also nicht nur den ersten Match ersetzen. > > Was bei ^ am Anfang vom Pattern zwar nicht schadet, aber sinnfrei ist. Nö, denn er soll ja in allen Zeilen ein Leerzeichen einfügen. Ohne g macht er das mMn nur beim ersten Treffer.
(prx) A. K. schrieb: > Was bei ^ am Anfang vom Pattern zwar nicht schadet, aber sinnfrei ist. Stimmt, in Fällen, wo es nur einen Match geben kann, ist das überflüssig. Ich hänge es nur aus Gewohnheit immer mit dran.
ThomasW schrieb: > Nö, denn er soll ja in allen Zeilen ein Leerzeichen einfügen. Ohne g > macht er das mMn nur beim ersten Treffer. Das betrifft nur mehrere Matches innerhalb der Zeile.
(prx) A. K. schrieb: > ThomasW schrieb: > Nö, denn er soll ja in allen Zeilen ein Leerzeichen einfügen. Ohne g > macht er das mMn nur beim ersten Treffer. > > Das betrifft nur mehrere Matches innerhalb der Zeile. Jaja, zeilenorientierter Editor ... haste wohl Recht!
Hmmm schrieb: >> "s" > > Search. > >> "/^" > > / beginnt die zu suchende Regular Expression, ^ ist der Zeilenanfang. > Mit $ kannst Du übrigens das Zeilenende matchen. > > ... > >> "/g" > > Global, also nicht nur den ersten Match ersetzen. Danke.
Nano schrieb: > Ich nutze vim in der Regel nicht, bin da also nicht fit drin. > > Jetzt möchte ich, wie in der Überschrift angegeben, eine Datei > bearbeiten, für die vim eventuell hilfreich sein könnte. Wenn du die Datei nicht auch noch editieren willst und 'sed' installiert ist, kannst du auch
1 | sed '120,180 s/^/ /' datei.txt |
verwenden.
Ich hätte vermutlich
1 | 120,180g/.\+/:norm I <CR> |
genommen; das <CR> ist als „Enter drücken“ zu verstehen. Im Unterschied zu dem Ansatz oben, werden hier keine Leerzeichen an den Anfang leerer Zeilen hinzugefügt. Könnte man mit der Variante oben natürlich auch verhindern.
Jemand schrieb: > Im Unterschied zu dem Ansatz oben, werden hier keine Leerzeichen an den > Anfang leerer Zeilen hinzugefügt. Könnte man mit der Variante oben > natürlich auch verhindern. Ja, sogar recht kompakt, z.B. so:
1 | :120,180s/^./ &/ |
Der Vollständigkeit halber wäre da noch an sed's -i erinnert, mit dem das File in-place modifiziert wird.
Jemand schrieb: > Ich hätte vermutlich >
1 | 120,180g/.\+/:norm I <CR> |
> genommen; das <CR> ist als „Enter drücken“ zu verstehen. > > Im Unterschied zu dem Ansatz oben, werden hier keine Leerzeichen an den > Anfang leerer Zeilen hinzugefügt. Könnte man mit der Variante oben > natürlich auch verhindern. Mein Editor den ich normalerweise benutze entfernt die Leerzeichen am Ende einer Zeile automatisch.
TIL about & in Ersetzungen :) ([code]:h sub-replace-special[\code])
Hmmm schrieb: > Nano schrieb: >> Jetzt würde mich noch interessieren, was die einzelnen Abschnitte >> bedeuten: >> Also >> "s" > > Search. Eigentlich substitute. >> "/^" > > / beginnt die zu suchende Regular Expression, Man kann dafür übrigens nicht nur /, sondern jedes beliebige Sonderzeichen verwenden. Also s.^. . hätte die gleiche Wirkung. Übrigens hat vim auch eine Hilfe. Mit :help :s bekommt man die zum subistitue-Kommando. Nano schrieb: > Mein Editor den ich normalerweise benutze entfernt die Leerzeichen am > Ende einer Zeile automatisch. Meiner pfuscht mir nicht in den Text rein, wenn ich ihm nicht sage, dass er das soll. Ich könnte das natürlich so einrichten, dass er das macht, aber das will ich gar nicht. Das macht sich beim Einchecken ins Repo nicht so gut, wenn der Editor einfach unkontrolliert Dinge verändert.
Rolf M. schrieb: > Nano schrieb: >> Mein Editor den ich normalerweise benutze entfernt die Leerzeichen am >> Ende einer Zeile automatisch. > > Meiner pfuscht mir nicht in den Text rein, wenn ich ihm nicht sage, dass > er das soll. Er pfuscht mir nicht rein, ich habe ihn so eingestellt, damit er genau das macht. Ich hatte jedenfalls noch nie eine Datei, bei der ich dringend Leerzeichen am Ende benötigen würde. Mir ist auch kein textbasiertes Dateiformat bekannt, das auf so etwas angewiesen ist. > Ich könnte das natürlich so einrichten, dass er das macht, Aha. > Das macht sich beim Einchecken ins Repo > nicht so gut, wenn der Editor einfach unkontrolliert Dinge verändert. Das Repo verändert selber Dinge. Kannst ja mal nen Text mit CRLF in ein git Repo einfügen, wenn das richtig eingestellt ist, dann wird das CR entfernt.
Nano schrieb: > Ich hatte jedenfalls noch nie eine Datei, bei der ich dringend > Leerzeichen am Ende benötigen würde. Mir ist auch kein textbasiertes > Dateiformat bekannt, das auf so etwas angewiesen ist. Einen gängigen Anwendungsfall gibt es, nämlich Signaturen von Mails und Usenet-Postings: https://en.wikipedia.org/wiki/Signature_block#Standard_delimiter Bei Quoted-Printable-Encoding ist das Leerzeichen allerdings in der Mail nicht mehr in nackter Form vorhanden.
Für Mails nutze ich mein E-Mail Programm, das hat nen eigenen Editor.
Nano schrieb: >> Das macht sich beim Einchecken ins Repo >> nicht so gut, wenn der Editor einfach unkontrolliert Dinge verändert. > > Das Repo verändert selber Dinge. > Kannst ja mal nen Text mit CRLF in ein git Repo einfügen, wenn das > richtig eingestellt ist, dann wird das CR entfernt. Es passt es halt an das jeweilige System an, wenn man das möchte. Aber das wird intern gemacht. Dazu wird nicht jedesmal eine Änderung draus gemacht. Wenn der Editor da aber Zeilenenden verändert, müllt mir das den Commit im Repo zu. Nano schrieb: > Für Mails nutze ich mein E-Mail Programm, das hat nen eigenen Editor. Das tue ich auch. Früher habe ich in der Firma Outlook als Mail- und Usenet-Programm nutzen müssen. Dessen Editor entfernt auch ungefragt Leerzeichen von den Zeilenenden und macht damit den Signaturtrenner kaputt - natürlich nicht abschaltbar.
Rolf M. schrieb: > Wenn der Editor da aber Zeilenenden verändert, müllt mir das den Commit > im Repo zu. lrn2git
Hmmm schrieb: >> Jetzt würde mich noch interessieren, was die einzelnen Abschnitte >> bedeuten: >> Also >> "s" > > Search. Nope, substitute wäre korrekt als Erklärung für 's' https://man7.org/linux/man-pages/man1/vi.1p.html Suchen ist '?' oder '/' .
Rolf M. schrieb: > Eigentlich substitute. Lerninstructor schrieb: > Nope, substitute wäre korrekt als Erklärung für 's' Stimmt, mea culpa!
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.