Versteckte Zeichen nach Pipe (|), gefolgt von einem Leerzeichen [duplizieren]

13

Wenn ich auf meinem Mac das Pipe-Zeichen (|) gefolgt von einem Leerzeichen verwende, wird häufig ein unsichtbares Zeichen dazwischen eingefügt.

Dies ist besonders ärgerlich, wenn Sie das Terminal verwenden, da dadurch Befehle ungültig werden.

Wenn ich in iterm2 Folgendes eingebe, erhalte ich häufig Folgendes:

ls | cat
zsh: command not found:  cat

Wenn ich die Nach-oben-Taste drücke, um meinen vorherigen Befehl abzurufen, und dann das Leerzeichen zwischen |und entferne und wieder einfüge cat, funktioniert der Befehl.

Wenn ich kopiere, füge die funktionierenden und nicht funktionierenden Befehle wie folgt in eine Datei ein:

non-working: ls | cat
working: ls | cat

und öffne es in Hex Fiend es zeigt folgendes:

non-working: ls | cat
working: ls | cat

Ich habe auch die gleiche Art von Problem in SublimeText2 festgestellt, bei dem die eckigen Klammern ( []) gefolgt von einem Leerzeichen verwendet wurden. Ich glaube nicht, dass es ein Problem mit iTerm2 ist.

raffiniert
quelle
1
Gibt es eine Möglichkeit, Terminal unsichtbare Zeichen anzeigen zu lassen, ähnlich wie Texteditoren sie anzeigen, z. B. als graue Kugel?
Jelovirt

Antworten:

14

Was passiert, ist, dass Sie die Leertaste gedrückt halten , wodurch ein nicht unterbrechendes Leerzeichen eingefügt wird , das in HTML durch die  Referenz bekannt ist. Dieses geschützte Leerzeichen ist nützlich bei der Textverarbeitung, bei der bestimmte Wörter zusammengehalten werden sollen, z. B. "OS" und "X" in "OS X".

Offensichtlich handelt es sich hierbei um ein Unicode-Zeichen ( 00A0). Daher schlagen die meisten Befehlszeilendienstprogramme fehl, z. B. das Anzeigen von Bashs _cat(wo _sich das nicht unterbrechende Leerzeichen befindet) und Hex Fiend, das nur eine schlechte Darstellung verwendet. Einige Editoren entfernen es nur stillschweigend (z. B. dieser Editor hier), während andere sogar eine spezielle Darstellung dafür haben (z. B. TextMate zeigt einen Punkt anstelle des Leerzeichens).

Es gibt zwei Lösungen:

slhck
quelle
Dies scheint tatsächlich das Problem zu sein. Ich kann nicht glauben, dass ich das noch nie gefangen habe. Ich denke, eine Lösung wäre, das mit dem Modifikator kombinierte Leerzeichen einem regulären Leerzeichen zuzuordnen .
Nifty
Ist es möglich, dass das Terminal nbsp als umgekehrtes Zeichen oder als eine Art von Zeichen anzeigt, sodass Sie es sofort sehen, wenn Sie einen Fehler machen?
Forthrin
@forthrin Gute Frage. Ich kenne keine andere Möglichkeit, als mit Ihren Ländereinstellungen herumzuspielen, sodass Nicht-ASCII-Zeichen nicht richtig angezeigt werden können.
Slhck