Скрытые символы вставляются после канала (|), за которым следует пробел

Очень часто на моем Mac, когда я использую символ трубы (|), за которым следует символ пробела, между ними вставляется невидимый символ.

Это особенно раздражает при использовании терминала, поскольку делает команды недействительными.

Если я набираю следующее в iterm2, я часто получаю следующее:

ls | cat
zsh: command not found:  cat

Если я нажму клавишу со стрелкой вверх, чтобы получить мою предыдущую команду, а затем удалите и снова вставьте пробел между | а также cat, команда будет работать.

Когда я копирую, вставляю рабочие и нерабочие команды в файл, например так:

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

и откройте его в Hex Fiend, оно показывает следующее:

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

Я также сталкивался с такой же проблемой в SublimeText2, используя квадратные скобки ([]), за которыми следовал пробел. Так что я не считаю, что это проблема с iTerm2.

1 ответ

Решение

Что происходит, вы продолжаете нажимать с помощью пробела, который вставляет неразрывный пробел, известный в HTML через   ссылка. Этот неразрывный пробел полезен при обработке текста, когда вы хотите, чтобы определенные слова слипались, например, "OS" и "X" в "OS X".

Очевидно, это символ Юникода (00A0), и, следовательно, большинство утилит командной строки выйдут из строя, например, просмотр bash _cat (где _ это неразрывный пробел), и Hex Fiend просто использует для этого плохое представление. Некоторые редакторы, с другой стороны, просто молча удаляют его (например, этот редактор прямо здесь), в то время как другие даже имеют специальное представление для него (например, TextMate, показывающий точку вместо пробела).

Есть два решения:

Другие вопросы по тегам