Frage
Von Frage Wie ein ersetzen Zeichen für eine neue Zeile in Vim? . Sie haben \ r zu verwenden, wenn Text für eine neue Zeile zu ersetzen, wie dies
:%s/%/\r/g
Aber wenn das Ende der Zeilen und Zeilenumbrüche für ein Zeichen zu ersetzen, können Sie es mögen:
:%s/\n/%/g
Welche Abschnitt des Handbuchs dokumentiert diese Verhaltensweisen und was ist die Argumentation hinter ihnen?
Lösung
\r
Spiele
\n
passt eine End-of-line - Wenn sie in einem String-Matching statt Puffer Text ein Literal newline Charakter angepasst ist.
Andere Tipps
http://vim.wikia.com/wiki/Search_and_replace :
Bei dem Suchen
...
\n
ist Zeilenvorschub-\r
istCR
(Carriage Return =Ctrl-M
=^M
)beim Ersetzen
...
\r
Newline ist,\n
ist ein Null-Byte (0x00
).
Ein weiterer Aspekt ist, dass \0
, die traditionell NULL ist, wird genommen in
s//\0/
bedeutet „das ganze abgestimmte Muster“. (Was, nebenbei bemerkt, ist redundant mit, und länger als &
).
- So Sie nicht
\0
könnenNULL
bedeuten, so dass Sie verwenden\n
- So Sie nicht
\n
bedeuten\n
verwenden können, so dass Sie\r
verwenden. - So Sie nicht
\r
können\r
bedeuten, aber ich weiß nicht, wer das Zeichen absichtlich hinzufügen wollen.
-☈
:help NL-used-for-Nul
Technisches Detail:
{Vi nicht
<Nul>
Zeichen in der Datei werden als<NL>
im Speicher abgelegt. Im Display sie werden als „^@
“ gezeigt. Die Übersetzung erfolgt beim Lesen und Schreiben Dateien. Um eine<Nul>
mit einem Suchmuster zu entsprechen, die Sie gerade eingeben CTRL- @ oder " CTRL-V 000". Dies ist wahrscheinlich genau das, was Sie erwarten. intern werden die Charakter ist mit einem<NL>
im Suchmuster ersetzt. Ungewöhnlich ist, dass Typisierung CTRL-V CTRL-J auch eine<NL>
einfügt, so sucht auch nach einem<Nul>
in der Datei.<Nul>
Zeichen in der Datei überhaupt behandeln}
Zunächst einmal offen :h :s
den Abschnitt siehe „4.2 Ersatz "die Dokumentation auf‚ändern‘. Hier ist, was der Befehl akzeptiert:
:[range]s[ubstitute]/{pattern}/{string}/[flags] [count]
Beachten Sie die Beschreibung pattern
und string
Für die
{pattern}
finden Sie unter|pattern|
.
{string}
kann eine Zeichenkette, oder etwas sein
Besondere; finden Sie unter|sub-replace-special|
.
So, jetzt wissen Sie, dass die Suchmuster und Ersatz Muster unterschiedliche Regeln.
Wenn Sie den Link |pattern|
folgen, gelangen Sie zu dem Abschnitt, der die ganze regexp Muster verwendet in Vim erklärt.
Inzwischen |sub-replace-special|
bringen Sie zu dem Unterabschnitt „4.2 Substitute“, die die Muster für die Substitution enthalten, unter denen \r
für Zeilenumbruch / split ist.
(Die Verknüpfung zu diesem Teil des Handbuchs ist :h :s%
)