2432 Stimmen

Wie man ein Zeichen durch einen Zeilenumbruch in Vim ersetzt

Ich versuche, jedes einzelne Element zu ersetzen. , in der aktuellen Datei durch eine neue Zeile zu ersetzen:

:%s/,/\n/g 

Aber es fügt etwas ein, das aussieht wie ein ^@ anstelle eines tatsächlichen Zeilenumbruchs. Die Datei befindet sich nicht im DOS-Modus oder so.

Was sollte ich tun?

Wenn Sie, wie ich, neugierig sind, lesen Sie die Frage Warum ist \r ein Zeilenumbruch für Vim? también.

2 Stimmen

Stack Overflow ist eine Website für Programmier- und Entwicklungsfragen. Diese Frage scheint nicht zum Thema zu gehören, da sie sich nicht auf Programmierung oder Entwicklung bezieht. Siehe Zu welchen Themen kann ich hier Fragen stellen? im Hilfe-Center. Vielleicht Super-Benutzer o Unix & Linux Stack Exchange wäre ein besserer Ort, um zu fragen.

9 Stimmen

@jww diese Frage ist 10 Jahre alt... scheint zu alt zu sein, um zu migrieren. Es gibt viele Fragen wie diese, zum Beispiel: stackoverflow.com/questions/10175812/

51 Stimmen

@jww vim ist ein Werkzeug, das üblicherweise von Programmierern verwendet wird, und Fragen zu Werkzeugen, die üblicherweise von Programmierern verwendet werden, sind ein Thema in Stapelüberlauf . Obwohl dies natürlich besser geeignet ist für Vi und Vim .

25voto

grantc Punkte 1693

Mit Vim unter Windows, verwenden Sie Ctrl + Q anstelle von Ctrl + V .

20voto

codeshot Punkte 1173

Das ist die beste Antwort für die Art und Weise, wie ich denke, aber es wäre in einer Tabelle schöner gewesen:

Warum ist \r ein Zeilenumbruch für Vim?

Also, Umformulierung:

Sie müssen Folgendes verwenden \r um einen Zeilenvorschub zu verwenden (ASCII 0x0A (der Unix-Newline) in einer Regex-Ersetzung, aber das ist eine Besonderheit der Ersetzung - normalerweise sollten Sie weiterhin erwarten, dass Sie \n für Netzeinspeisung und \r für Wagenrücklauf.

Das liegt daran, dass Vim die \n in einer Ersetzung für das Zeichen NIL (ASCII 0x00 ). Man hätte erwarten können, dass NIL \0 stattdessen, wodurch \n für seine übliche Verwendung als Zeilenvorschub, aber \0 hat bereits eine Bedeutung in Regex-Ersetzungen, daher wurde es in \n . Daher geht man weiter und verschiebt auch den Zeilenumbruch von \n a \r (was in einem Regex-Muster das Wagenrücklaufzeichen ist, ASCII 0x0D ).

Character                | ASCII code | C representation | Regex match | Regex replacement
-------------------------+------------+------------------+-------------+------------------------
nil                      | 0x00       | \\0               | \\0          | \\n
line feed (Unix newline) | 0x0a       | \\n               | \\n          | \\r
carriage return          | 0x0d       | \\r               | \\r          | <unknown>

NB: ^M ( Ctrl + V Ctrl + M unter Linux) fügt einen Zeilenumbruch ein, wenn es in einer Regex-Ersetzung verwendet wird, und nicht einen Wagenrücklauf, wie andere empfohlen haben (ich habe es gerade ausprobiert).

Beachten Sie auch, dass Vim das Zeilenvorschubzeichen übersetzt, wenn er in eine Datei speichert, basierend auf seinen Dateiformat-Einstellungen, und das könnte die Dinge verwirren.

11voto

rickfoosusa Punkte 971

から Eclipse die ^M Zeichen in eine Zeile eingebettet sein können und Sie diese in Zeilenumbrüche umwandeln möchten.

:s/\r/\r/g

9voto

Kiran K Telukunta Punkte 1928

Aber wenn man substituieren muss, dann funktioniert das Folgende:

:%s/\n/\r\|\-\r/g

Im obigen Beispiel wird jede nächste Zeile durch die nächste Zeile ersetzt, und dann |- und wieder eine neue Zeile. Dies wird in Wikitabellen verwendet.

Wenn der Text wie folgt lautet:

line1
line2
line3

Sie wird geändert in

line1
|-
line2
|-
line3

5voto

Hier ist die Antwort, die bei mir funktioniert hat. Von diesem Kerl:

---- zitiert Verwenden Sie den vi-Editor, um ein Zeilenumbruchzeichen in replace einzufügen


Etwas anderes, das ich tun muss und mir nicht merken kann und dann nachschlagen muss.

Um in vi ein Zeilenumbruchszeichen in eine Such- und Ersetzungsfunktion einzufügen, gehen Sie wie folgt vor:

:%s/look_for/replace_with^M/g

Der obige Befehl würde alle Instanzen von "look_for" durch "replace_with" ersetzen \n " (mit \n bedeutet Zeilenumbruch).

Um das "^M" zu erhalten, geben Sie die Tastenkombination Ctrl + V und danach (alle Tasten loslassen) die Taste Enter Schlüssel.


CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X