Я использую финскую раскладку клавиатуры, которая отображает AltGr+ Spaceна неразрывный пробел (NBSP, U + 00A0). Я доволен этим в целом, но обнаружил, что часто использую символ NBSP вместо обычного пробела после |
символа " " (пишется с AltGr+ <с финской раскладкой клавиатуры) при использовании командной строки bash. Я предполагаю, что это вызвано тем фактом, что мне нужно держать AltGrтрубку во время набора текста и отпускать ее, прежде чем попасть в пробел. И когда у меня плохое время для выпуска, AltGrя получаю невидимую опечатку в командной строке и сообщения об ошибках, такие как
grep: command not found
который выглядит очень похоже на
grep: command not found
что делает эту проблему немного трудно заметить в первый раз.
Я знаю, что могу отключить NBSP, но я бы предпочел отключить его (с AltGr+ Spaceдля создания обычного пространства) только после символа канала или, если это невозможно, всегда в командной строке или на readline
уровне bash . Есть ли простой способ сделать это без изменения исходного кода bash readline
или моего эмулятора терминала ( gnome-terminal
)?
Другим хорошим решением было бы настроить NBSP так, чтобы он был каким-то образом виден в командной строке, например, заменен другим символом (скажем, U + 2423 ␣
) только для рендеринга.
источник
" ":␣
недостаточно? Что еще тебе нужно?echo a␣b
но в результате выходная строка былаecho a b
с реальным NBSP в выводе. Таким образом, я думаю, что это должно быть сделано на уровне readline (то есть редактор командной строки всегда отображает видимый символ, но эмулятор терминала не может знать разницу между отображением редактора и отображением вывода, и поэтому эмулятор терминала не может выполнять визуальную замену для рендеринга. ).Ответы:
Это можно сделать на
readline
уровне двумя разными способами.Способ 1
Поместите следующее в
.inputrc
(файл конфигурации дляreadline
):Если уценка испортила вышесказанное, вы должны поместить NBSP в кавычки слева от двоеточия, как объяснено в комментарии. Это отобразит любое возникновение NBSP во входном потоке с обычным пробелом.
Способ 2
Поместите следующее в
.inputrc
:Идея состоит в том, чтобы отобразить последовательность ключей {pipe, за которой следует NBSP}, в {pipe, за которым следует пробел}. Это работает, если вы набираете последовательность в течение 250 мс (настраивается выше). Тем не менее, пока не истечет тайм-аут, один только ввод символа канала ничего не выведет. И если вы введете последовательность слишком медленно, исправление не будет применено. Также обратите внимание, что время ожидания является глобальным, поэтому, если вы намереваетесь использовать любые другие последовательности, вы должны установить время ожидания достаточно длительное, чтобы можно было набрать самую длинную последовательность. (Библиотека readline не достаточно умна, чтобы позволить вводить символы, а затем заменять уже видимые символы после того, как последовательность символов соответствует конфигурации.)
источник
Есть отличная статья, посвященная этой проблеме:
Я пытался решить основную проблему с помощью
grep
сообщений об ошибках и изменил NBSP на что-то более заметное с помощьюexec
команды. Я еще не получил синтаксис:Идея состоит в том, чтобы включить эту команду,
~/.bashrc
чтобы она автоматически загружалась приgnome-terminal
открытии. Но, как я уже сказал, это еще не работает ...источник
perl -i -npe 's/MARKER/4 KB/'
и случайно вставить NBSP между4
иK
. Ой, проблема сохраняется в файле, но я не получаю никакой ошибки, и написанная мной командная строка выглядит идеально.