Ich verwende ein finnisches Tastaturlayout, das AltGr+ Spaceeinem nicht unterbrechenden Bereich (NBSP, U + 00A0) zuordnet. Ich bin im Allgemeinen damit zufrieden, aber ich stelle fest, dass ich häufig versehentlich NBSP anstelle des normalen Leerzeichens nach dem Pipe- |
Symbol (geschrieben mit AltGr+ <mit finnischem Tastaturlayout) schreibe, während ich die Bash-Befehlszeile verwende. Ich denke, dies wird durch die Tatsache verursacht, dass ich AltGrbeim Tippen des Rohrs halten und loslassen muss, bevor ich auf die Leertaste treffe. Und wenn ich ein schlechtes Timing für die Veröffentlichung von AltGrhabe, bekomme ich unsichtbaren Tippfehler in der Kommandozeile und Fehlermeldungen wie
grep: command not found
das sieht ziemlich ähnlich aus
grep: command not found
Das macht dieses Problem beim ersten Mal etwas schwer zu bemerken.
Ich weiß, dass ich NBSP deaktivieren kann , aber ich würde es vorziehen, es zu deaktivieren (mit AltGr+ Space, um regulären Speicherplatz zu erzeugen), nur nach dem Pipe-Zeichen oder, wenn dies nicht möglich ist, immer in der Bash-Befehlszeile oder readline
-Ebene. Gibt es eine einfache Möglichkeit, dies zu tun, ohne den Quellcode von bash readline
oder meinen Terminalemulator ( gnome-terminal
) zu ändern ?
Eine andere gute Lösung wäre, NBSP so zu konfigurieren, dass es in der Befehlszeile irgendwie sichtbar ist, z. B. durch ein anderes Zeichen (z. B. U + 2423 ␣
) ersetzt, das nur zum Rendern dient.
quelle
" ":␣
aus, Charaktere gefunden zu haben? Was brauchst du noch?echo a␣b
aber die resultierende Ausgabezeile enthieltecho a b
echtes NBSP in der Ausgabe. Als solche, ich denke , es auf der Readline- Ebene getan werden muss (das heißt, Kommandozeilen - Editor zeigt immer sichtbar Charakter , aber Terminal - Emulator nicht den Unterschied zwischen Editoranzeige und Ausgabeanzeige wissen kann und daher der Terminal - Emulator nicht den visuellen Ersatz für das Rendering tun ).Antworten:
Dies kann auf der
readline
Ebene auf zwei verschiedene Arten erfolgen.Methode 1
Geben Sie Folgendes ein
.inputrc
(die Konfigurationsdatei fürreadline
):Wenn Markdown das oben genannte durcheinander bringt, müssen Sie NBSP in Anführungszeichen auf der linken Seite des Doppelpunkts setzen, wie im Kommentar erläutert. Dadurch wird jedes Auftreten von NBSP im Eingabestream mit einem regulären Leerzeichen zugeordnet.
Methode 2
Geben Sie Folgendes ein
.inputrc
:Die Idee ist, die Schlüsselsequenz {Pipe gefolgt von NBSP} {Pipe gefolgt von Leerzeichen} zuzuordnen. Dies funktioniert, wenn Sie die Sequenz innerhalb von 250 ms eingeben (oben konfigurierbar). Bis das Zeitlimit abgelaufen ist, gibt die Eingabe des Pipe-Symbols allein nichts aus. Und wenn Sie die Sequenz zu langsam eingeben, wird der Fix nicht angewendet. Beachten Sie auch, dass das Zeitlimit global ist. Wenn Sie also andere Sequenzen verwenden möchten, müssen Sie das Zeitlimit lange genug einstellen, um die längste Sequenz eingeben zu können. (Die Readline-Bibliothek ist nicht clever genug, um die Zeichen einzugeben und später bereits sichtbare Zeichen zu ersetzen, nachdem die Zeichenfolge mit der Konfiguration übereinstimmt.)
quelle
Es gibt einen ausgezeichneten Artikel, der sich mit diesem Problem befasst:
Ich habe versucht, das Hauptproblem mit
grep
Fehlermeldungen zu lösen und NBSP mithilfe desexec
Befehls in etwas zu ändern, das sichtbarer ist . Ich habe die Syntax noch nicht festgelegt:Die Idee ist, diesen Befehl
~/.bashrc
so zu haben, dass er beimgnome-terminal
Öffnen automatisch geladen wird . Aber wie gesagt es funktioniert noch nicht ...quelle
perl -i -npe 's/MARKER/4 KB/'
und versehentlich einen NBSP zwischen4
und schiebeK
. Hoppla, das Problem wird in einer Datei gespeichert, aber ich erhalte keine Fehlermeldung und die von mir geschriebene Befehlszeile sieht perfekt aus.