\ n und \ rs unterschiedliche Verhaltensweisen unter verschiedenen Umständen in Vim

8

Angenommen, ich habe eine Zeile mit nur einem Zeichen, lasst uns den Effekt \n unter verschiedenen Umständen sehen:

%Vor%

Warum verhält sich \n anders? Dann sehen wir uns die Bedingung mit substitute()

an %Vor%

Diesmal wird \n immer noch als "newline" interpretiert, aber wie erklärt man den Backslash?

Nächster Teil, sagen wir, dass ich noch eine Zeile mit nur einem Zeichen 's' habe, anstatt \n , \r wird untersucht:

%Vor% Der Effekt von

\r ist wie \n in :echo "a\nb" , und die Regel des umgekehrten Schrägstrichs ist dieselbe.

%Vor%

Was macht \r in diesem Fall? Und der dritte Teilfall ist noch seltsamer.

%Vor%

Dennoch kann ich nicht verstehen, wie sich die unterschiedliche Anzahl von Backslashes verhält.

Meine Frage ist:

  1. Warum verhält sich \n oder \r unter :substitute , echo direkt und substitute() ?
  2. anders
  3. Wie kann man die Anzahl der umgekehrten Schrägstriche bei Verwendung von substitute() ?
  4. erklären?
  5. Was sind die Unterschiede zwischen \n und \r in Vim?

Ergänzung 1:

Wenn ich :let s = "a\\nb" und dann <C-r>=s sehe, um es im Puffer zu sehen, sehe ich

%Vor%

Wie erklärt man das?

    
fujianjin6471 24.12.2015, 14:29
quelle

1 Antwort

2
  1. Für beide :echo und substitute() ist \n eine neue Zeile und \r ist ein Wagenrücklauf. Sie sollten tun, was Sie erwarten würden. \n bewegt den Cursor zur nächsten Zeile (Spalte 1) und \r verschiebt den Cursor in Spalte 1 derselben Zeile. Für \r überschreibt das nächste Zeichen, das gedruckt wird, das zuvor gedruckte Zeichen. (Ich konzentriere mich hauptsächlich auf substitute() und :echo , :substitute ist unten)

  2. Warum sich echo und substitute () anders verhalten. Sie müssen verstehen, wie viele Interpretationen der Zeichenfolge passieren. Für echo passiert nur eines für substitute () zwei passieren.

    %Vor%

Das zweite ist das gleiche wie das, was Sie für das Echo erwartet hätten. Strings in Anführungszeichen haben ihren Inhalt entsprechend :help expr-quote geändert. Das bedeutet, dass sowohl echo als auch substitute dasselbe sehen, wenn der String nur einmal interpretiert wird (was einfache Anführungszeichen verwendet)

"a\\rb" wird nach einer Interpretation als a\rb und nach der zweiten als a<CR>b interpretiert. Was dazu führt, dass nur b gedruckt wird.

  1. \r und \n ändern sich je nachdem, wo sie verwendet werden. Der einzige Unterschied wäre :substitute , wobei \r als neue Zeile in der Ersetzung verwendet wird.

Dies ist einer der Fälle, in denen sich :substitute und substitute() anders verhalten,

:substitue folgt

%Vor%

( <NUL> ist dasselbe wie ^@ , was nicht dasselbe ist wie eine neue Zeile)

während substitute() folgt

%Vor%     
FDinoff 24.12.2015, 19:19
quelle

Tags und Links