Używam fińskiego układu klawiatury, który odwzorowuje AltGr+ Spacena niezniszczalną przestrzeń (NBSP, U + 00A0). Ogólnie jestem z tego zadowolony, ale okazuje się, że często przypadkowo piszę NBSP zamiast normalnej spacji po potoku „ |
” (napisany za pomocą AltGr+ <z fińskim układem klawiatury) podczas korzystania z linii poleceń bash. Myślę, że jest to spowodowane faktem, że muszę przytrzymać AltGrpodczas pisania fajki i zwolnić ją przed uderzeniem w spację. A kiedy mam zły czas na wydanie, AltGrkończę z niewidoczną literówką w wierszu poleceń i komunikatami o błędach, takimi jak
grep: command not found
który wygląda dość podobnie do
grep: command not found
co sprawia, że problem ten jest nieco trudny do zauważenia za pierwszym razem.
Wiem, że mogę wyłączyć NBSP, ale wolałbym go wyłączyć (mając AltGr+, Spaceaby utworzyć zwykłe miejsce) tylko po znaku potoku, a jeśli nie jest to możliwe, zawsze w wierszu poleceń lub na readline
poziomie bash . Czy jest jakiś prosty sposób, aby to zrobić bez modyfikowania kodu źródłowego bash readline
lub emulatora terminala ( gnome-terminal
)?
Innym dobrym rozwiązaniem byłoby skonfigurowanie NBSP, aby było jakoś widoczne w wierszu poleceń, np. Zastąpione innym znakiem (powiedzmy U + 2423 ␣
) tylko do renderowania.
źródło
" ":␣
wystarczy? Co jeszcze potrzebujesz?echo a␣b
ale wynikowa linia wyjściowa byłaecho a b
z prawdziwym NBSP w danych wyjściowych. W związku z tym myślę, że należy to zrobić na poziomie odczytu (tzn. Edytor wiersza poleceń zawsze wyświetla widoczny znak, ale emulator terminala nie może rozpoznać różnicy między wyświetlaniem edytora a wyświetlaniem danych wyjściowych, a zatem emulator terminala nie może dokonać wizualnej zamiany renderowania ).Odpowiedzi:
Można to zrobić na
readline
poziomie na dwa różne sposoby.Metoda 1
Wstaw
.inputrc
(plik konfiguracyjny dlareadline
):Jeśli obniżenie wartości pomniejsza powyższe, musisz umieścić NBSP w cudzysłowach po lewej stronie okrężnicy, jak wyjaśniono w komentarzu. Spowoduje to zmapowanie każdego wystąpienia NBSP w strumieniu wejściowym z regularną spacją.
Metoda 2
Wprowadź następujące dane
.inputrc
:Pomysł polega na zamapowaniu sekwencji klawiszy {pipe, po której następuje NBSP} na {pipe, po której następuje spacja}. Działa to, jeśli wpiszesz sekwencję w ciągu 250 ms (konfigurowalne powyżej). Jednak dopóki limit czasu nie minie, samo wpisanie symbolu potoku nie wyprowadzi niczego. A jeśli wpiszesz sekwencję zbyt wolno, poprawka nie zostanie zastosowana. Należy również pamiętać, że limit czasu jest globalny, więc jeśli zamierzasz użyć innych sekwencji, musisz ustawić limit czasu na tyle długo, aby móc wpisać najdłuższą sekwencję. (Biblioteka readline nie jest wystarczająco sprytna, aby umożliwić wpisywanie znaków, a później zastąpić już widoczne znaki po dopasowaniu sekwencji znaków do konfiguracji).
źródło
Istnieje doskonały artykuł na ten temat:
Próbowałem rozwiązać główny problem za pomocą
grep
komunikatów o błędach i zmienić NBSP na coś bardziej widocznego za pomocąexec
polecenia. Jednak nie mam jeszcze poprawionej składni:Chodzi o to, aby mieć to polecenie,
~/.bashrc
aby automatycznie ładowało się zgnome-terminal
otwieraniem. Ale jak powiedziałem, jeszcze nie działa ...źródło
perl -i -npe 's/MARKER/4 KB/'
i przypadkowo wsuwam NBSP między4
aK
. Ups, problem jest zapisywany w pliku, ale nie pojawia się żaden błąd, a napisana linia poleceń wygląda idealnie.