282 Stimmen

Warum ist \r ein Zeilenumbruch für Vim?

Von der Frage Wie ersetzt man ein Zeichen durch einen Zeilenumbruch in Vim? . Sie müssen Folgendes verwenden \r beim Ersetzen von Text durch einen Zeilenumbruch, etwa so

:%s/%/\r/g

Wenn Sie jedoch Zeilenende und Zeilenumbrüche durch ein Zeichen ersetzen, können Sie dies wie folgt tun:

:%s/\n/%/g 

In welchem Abschnitt des Handbuchs sind diese Verhaltensweisen dokumentiert, und was ist die Begründung dafür?

239voto

Desde http://vim.wikia.com/wiki/Search_and_replace :

Wenn die Suche

...

\n ist ein Zeilenumbruch, \r es CR (Wagenrücklauf = Ctrl-M = ^M )

Beim Ersetzen

...

\r ist ein Zeilenumbruch, \n ist ein Null-Byte ( 0x00 ).

157voto

pjz Punkte 39845

Desde vim-Dokumente über Muster :

\r passt zu <CR>

\n entspricht einem Zeilenende - Beim Abgleich in einer Zeichenkette anstelle von Puffertext ein wörtlicher Zeilenumbruch Zeichen übereinstimmen.

142voto

rking Punkte 1522

Ein weiterer Aspekt dabei ist, dass \0 der traditionell NULL ist, wird in s//\0/ für "das gesamte übereinstimmende Muster" steht. (Was übrigens redundant ist mit und länger als, & ).

  • Sie können also nicht verwenden \0 zu bedeuten NULL Sie verwenden also \n
  • Sie können also nicht verwenden \n zu bedeuten \n Sie verwenden also \r .
  • Sie können also nicht verwenden \r zu bedeuten \r aber ich weiß nicht, wer dieses Zeichen absichtlich hinzufügen würde.

-

50voto

Aristotle Pagaltzis Punkte 106298

:help NL-used-for-Nul

Technische Einzelheiten:

<Nul> Zeichen in der Datei werden gespeichert als <NL> in Erinnerung. Auf dem Display werden sie angezeigt als " ^@ ". Die Übersetzung erfolgt beim Lesen und Schreiben von Dateien. Um eine <Nul> mit einem Suchmuster können Sie einfach eingeben STRG-@ oder " CTRL-V 000". Das ist wahrscheinlich genau das, was Sie erwarten. Intern wird das Zeichen durch ein <NL> im Suchmuster. Ungewöhnlich ist, dass dass die Eingabe von CTRL-V CTRL-J fügt auch eine <NL> sucht also auch nach einem <Nul> in der Datei. {Vi kann nicht mit <Nul> Zeichen in der Datei überhaupt}


12voto

syockit Punkte 5661

Erstens: Öffnen :h :s den Abschnitt "4.2 Ersetzen" der Dokumentation über "Ändern" zu sehen. Hier ist, was der Befehl annimmt:

:[range]s[ubstitute]/{pattern}/{string}/[flags] [count]

Beachten Sie die Beschreibung über pattern y string

Für die {pattern} siehe |pattern| .
{string} kann eine wörtliche Zeichenkette sein, oder etwas
speziell; siehe |sub-replace-special| .

Sie wissen nun, dass Suchmuster und Ersetzungsmuster unterschiedlichen Regeln folgen. Wenn Sie dem Link zu |pattern| führt Sie zu dem Abschnitt, der die gesamten in Vim verwendeten Regexp-Muster erklärt.

Inzwischen, |sub-replace-special| führt Sie zu dem Unterabschnitt "4.2 Substitute", der die Muster für die Substitution enthält, darunter \r für Zeilenumbruch/Split.

(Die Abkürzung für diesen Teil des Handbuchs lautet :h :s% )

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