Caracteres ocultos inseridos após o pipe (|) seguido de um espaço [duplicado]

13

Muitas vezes, no meu Mac, quando eu uso o caractere de barra vertical (|) seguido por um caractere de espaço, um caractere invisível será inserido no meio.

Isso é especialmente irritante ao usar o terminal, pois torna os comandos inválidos.

Se eu digitar o seguinte em iterm2, geralmente recebo o seguinte:

ls | cat
zsh: command not found:  cat

Se eu pressionar a tecla de seta para cima para obter meu comando anterior e remover e reinserir o espaço entre |e cat, o comando funcionará.

Quando copiar, cole os comandos de trabalho e não trabalho em um arquivo, desta forma:

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

e abra-o no Hex Fiend, ele mostra o seguinte:

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

Também experimentei o mesmo tipo de problema no SublimeText2 usando colchetes ( []) seguido de um espaço. Portanto, não acredito que seja um problema com o iTerm2.

bacana
fonte
1
Relacionado a isso, existe uma maneira de o Terminal mostrar caracteres invisíveis, semelhante à maneira como os editores de texto os mostram, por exemplo, como uma bala cinza?
Jelovirt

Respostas:

14

O que acontece é que você continua pressionando a barra de espaço, que insere um espaço sem quebra , conhecido em HTML através da  referência. Esse espaço ininterrupto é útil no processamento de texto em que você deseja que certas palavras se juntem, como "OS" e "X" em "OS X".

Obviamente, esse é um caractere unicode (00A0 ) e, portanto, a maioria dos utilitários de linha de comando falhará, como a visualização do bash _cat(onde _é o espaço sem quebra) e o Hex Fiend apenas usando uma representação incorreta para ele. Alguns editores, por outro lado, simplesmente o retiram silenciosamente (por exemplo, este editor aqui), enquanto outros ainda têm uma representação especial para ele (por exemplo, TextMate mostrando um ponto em vez do espaço em branco).

Existem duas soluções:

slhck
fonte
De fato, esse parece ser o problema. Não acredito que não peguei isso antes. Eu acho que uma solução seria remapear o espaço combinado com o modificador para um caractere de espaço regular.
Nifty
É possível fazer o Terminal exibir nbsp como um caractere reverso ou algum tipo, para que você o veja instantaneamente quando digitar errado?
forthrin 24/03
@forthrin Boa pergunta. Não conheço nenhuma maneira de fazer isso, além de mexer com as configurações de localidade, de modo que caracteres não ASCII não possam ser exibidos corretamente.
slhck