Ukryte znaki wstawiane po potoku (|), a następnie spacja [duplikat]

13

Bardzo często na komputerze Mac, gdy używam znaku potoku (|), a następnie znaku spacji, między nimi zostanie wstawiony niewidoczny znak.

Jest to szczególnie denerwujące podczas korzystania z terminala, ponieważ powoduje, że polecenia są nieważne.

Jeśli wpiszesz w iterm2 następujące, często otrzymuję następujące:

ls | cat
zsh: command not found:  cat

Jeśli uderzę w klawisz strzałki w górę, aby uzyskać moje poprzednie polecenie, a następnie usuń i wstaw ponownie spację między |i cat, polecenie będzie działać.

Podczas kopiowania wkleję działające i niedziałające polecenia do pliku, jak poniżej:

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

i otwórz go w Hex Fiend , pokazuje to:

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

Ten sam problem występowałem również w SublimeText2 przy użyciu nawiasów kwadratowych ( []), po których następuje spacja. Więc nie wierzę, że to problem z iTerm2.

fajne
źródło
1
W związku z tym, czy istnieje sposób, aby Terminal wyświetlał niewidoczne znaki, podobnie jak pokazują to edytory tekstu, np. Jako szara kula?
jelovirt

Odpowiedzi:

14

To, co się dzieje, polega na tym, że naciskasz klawisz spacji, który wstawia nieprzerwaną spację , znaną w HTML za pomocą  odwołania. Ta niezniszczalna przestrzeń jest przydatna w przetwarzaniu tekstu, w którym chcesz, aby niektóre słowa były sklejone, na przykład „OS” i „X” w „OS X”.

Oczywiście jest to znak Unicode ( 00A0), a zatem większość narzędzi wiersza poleceń zawiedzie, takich jak widzenie bash _cat(gdzie _jest nieprzerwana spacja), a Hex Fiend po prostu używa dla niego złej reprezentacji. Z drugiej strony niektórzy redaktorzy po prostu dyskretnie go usuwają (np. Ten edytor tutaj), podczas gdy inni mają nawet specjalną reprezentację (np. TextMate pokazuje kropkę zamiast pustego miejsca).

Istnieją dwa rozwiązania:

slhck
źródło
To rzeczywiście wydaje się być problemem. Nie mogę uwierzyć, że wcześniej tego nie złapałem. Wydaje mi się, że rozwiązaniem byłoby ponowne mapowanie spacji w połączeniu z modyfikatorem na zwykły znak spacji.
ładne
Czy jest możliwe, aby terminal wyświetlał nbsp jako znak odwrotny lub jakiś inny, abyś natychmiast zobaczył go, gdy się pomylisz?
forwardrin
@forthrin Dobre pytanie. Nie znam żadnego sposobu, aby to zrobić, oprócz bałagania się w ustawieniach regionalnych, tak że znaki spoza ASCII nie mogą być poprawnie wyświetlane.
slhck