In Vim kann kein Leerzeichen durch eine neue Zeile ersetzt werden

70

Ich kenne den Thread .

ich renne

:%s/ /s/\n/g

Ich bekomme

E488: Trailing characters

2. Beispiel

ich renne

:%s/ /\n/g

Ich bekomme

text^@text

Ich führe die gleichen Codes auch mit den folgenden Einstellungen separat aus

set fileformat=unix

und

set fileformat=dos

Wie können Sie in Vim durch eine neue Zeile ersetzen?

Léo Léopold Hertz 준영
quelle

Antworten:

140

:%s/ /Ctrl vReturn/g

Wo Ctrl vist die Steuertaste plus die Taste v und Returndie Eingabetaste (die auf der Haupttastatur, nicht die Eingabetaste auf dem Nummernblock). Die anderen Zeichen werden wie gewohnt eingegeben.

Wenn dies korrekt eingegeben wird, wird die Sequenz Ctrl vReturnals Zeichen angezeigt ^M, normalerweise in einer anderen Farbe, um anzuzeigen, dass sie speziell sind. Beachten Sie, dass tatsächlich die Eingabe ^Mwird nicht arbeiten.

Beachten Sie auch, dass es in Vim für Windows Control-q anstelle von Control-v ist (da dies Einfügen ist).


Strg-v ermöglicht auch die Eingabe anderer "spezieller" Tasten über die Tastatur. Es ist auch nützlich für zB Tab oder Rücktaste.

sleske
quelle
Ich akzeptiere die Antwort, weil sie am systemunabhängigsten ist. Samoz Antwort funktioniert auch. Es ist überraschend, dass der Befehl für Windows unter meinem Betriebssystem / X funktioniert, nicht der Unix-Befehl.
Léo Léopold Hertz 26
@rangalo ::% s / / \ r / g funktioniert auch gut für mich, aber nicht:% s / / \ n / g.
Léo Léopold Hertz 준영
@theonlygusti: Hast du die Erklärungen gelesen? <CTRL-V>ist Strg-Taste plus Taste v. Wenn kopiert und eingefügt, funktioniert es nicht.
Sleske
Ich habe meine Antwort bearbeitet, um zu verdeutlichen, welche Tasten gedrückt werden müssen.
Sleske
1
Um ehrlich zu sein, ergab die Tastenfolge zunächst keinen Sinn. Aber nachdem Sie sich einen Moment Zeit genommen haben, um es zu schätzen, macht es jetzt vollkommen Sinn; Einfügen eines Rückkehrcodes. Vielen Dank für das Teilen von @sleske.
Matt Setter
51

Versuchen

%s/ /\r/g
Rangalo
quelle
8

Gib das Folgende ein:

:s/ /

Geben Sie nun Strg-V oder Strg-Q ein (abhängig von Ihrer Konfiguration) und drücken Sie die Eingabetaste. Sie sollten jetzt haben:

:s/ /^M

Beende es:

:s/ /^M/g

und du bist gut zu gehen.


quelle
2

Um Ihr Problem mit nachgestellten Zeichen zu lösen, haben Sie folgende Regex angegeben:

:%s/ /s/\n/g

Du hast zu viele /. Was passiert ist, dass Sie '' durch ersetzen sund dies nach der Ersetzung markieren:\n/g

Ich denke du meintest das:

:%s/ \s/\n/g

Beachten Sie, dass Ihr /sin geändert wurde \s. Jetzt ersetzt die Ersetzung ein Leerzeichen, gefolgt von einem Leerzeichen jeglicher Art (Leerzeichen oder Tabulator) \n. Ich bezweifle, dass dies das Problem löst oder das Leerzeichen durch eine neue Zeile ersetzt, aber es sollte die Fehlermeldung erklären.

Nathan Fellman
quelle
1

Versuchen Sie es entweder

Für Unix:

:1,$s/\ /\n/g

Für Windows:

:1,$s/\ /\r/g

Dies enthält ein Escape-Zeichen für das Leerzeichen.

Samoz
quelle
Interessant. Ich muss es versuchen.
Samoz