In der Syntax s/foo/bar
, \r
y \n
haben je nach Kontext unterschiedliche Bedeutungen.
Kurz:
Für foo
:
\r
== "Wagenrücklauf" ( CR
/ ^M
)
\n
== entspricht "Zeilenvorschub" ( LF
) auf Linux/Mac, und CRLF
unter Windows
Für bar
:
\r
== produziert LF
auf Linux/Mac, CRLF
unter Windows
\n
== "Null-Byte" ( NUL
/ ^@
)
Bei der Bearbeitung von Dateien unter Linux (z. B. auf einem Webserver), die ursprünglich in einer Windows-Umgebung erstellt und hochgeladen wurden (z. B. per FTP/SFTP), werden alle ^M
die Sie in vim sehen, sind die CR
die von Linux nicht übersetzt werden, da es nur LF
um einen Zeilenumbruch darzustellen.
Länger (mit ASCII-Zahlen):
NUL
== 0x00 == 0 == Ctrl + kbd>@</kbd == ^@
in vim angezeigt
LF
== 0x0A == 10 == Ctrl + J
CR
== 0x0D == 13 == Ctrl + M == ^M
in vim angezeigt
Hier finden Sie eine Liste der ASCII-Steuerzeichen . Fügen Sie sie in Vim über Ctrl + V , Ctrl + ---key--- .
In der Bash oder den anderen Unix/Linux-Shells geben Sie einfach Ctrl + ---key--- .
Versuchen Sie Ctrl + M in Bash. Es ist dasselbe wie das Drücken von Enter da die Shell erkennt, was gemeint ist, auch wenn Linux-Systeme Zeilenvorschübe zur Begrenzung von Zeilen verwenden.
Zum Einfügen von Literalen in der Bash, setzen Sie ihnen Ctrl + V wird auch funktionieren.
Versuchen Sie es in Bash:
echo ^[[33;1mcolored.^[[0mnot colored.
Diese verwendet ANSI-Escape-Sequenzen . Setzen Sie die beiden ^[
über Ctrl + V , Esc .
Sie könnten auch versuchen Ctrl + V , Ctrl + M , Enter , die Ihnen dies liefert:
bash: $'\r': command not found
Erinnern Sie sich an die \r
von oben? :>
Diese ASCII-Steuerzeichen Liste ist anders als eine vollständige ASCII-Symboltabelle dass die Steuerzeichen, die in eine Konsole/Pseudoterminal/Vim über die Ctrl Schlüssel (haha), finden Sie dort.
In C und den meisten anderen Sprachen hingegen werden diese "Zeichen" normalerweise durch Oktalcodes dargestellt.
Wenn Sie wirklich wissen wollen, woher das alles kommt: Das TTY entmystifiziert . Dies ist der beste Link, den Sie zu diesem Thema finden werden, aber Vorsicht: Es gibt Drachen.
TL;DR
Normalerweise foo
= \n
et bar
= \r
.
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 .