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


13

Очень часто на моем 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
В связи с этим, есть ли способ, чтобы терминал отображал невидимые символы, подобно тому, как текстовые редакторы показывают их, например, в виде серой маркировки?
Джеловирт

Ответы:


14

Что происходит, так это то, что вы продолжаете нажимать клавишу пробела, которая вставляет неразрывный пробел , известный в HTML через  ссылку. Этот неразрывный пробел полезен при обработке текста, когда вы хотите, чтобы определенные слова слипались, например, «OS» и «X» в «OS X».

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

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


Это действительно кажется проблемой. Не могу поверить, что я не поймал этого раньше. Я думаю, что решение было бы переназначить пространство в сочетании с модификатором в обычный символ пробела.
отличный

Можно ли сделать так, чтобы Терминал отображал nbsp в качестве обратного символа или какого-то другого вида, чтобы вы могли сразу увидеть его, когда наберете опечатку?
forthrin

@forthrin Хороший вопрос. Я не знаю ни одного способа сделать это, кроме как возиться с настройками вашей локали, чтобы не-ASCII символы не могли отображаться должным образом.
Slhck
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.