Могу ли я настроить bash / readline для автоматического преобразования NBSP в обычное пространство?

Я использую финскую раскладку клавиатуры, которая отображает AltGr + Space на неразрывный пробел (NBSP, U + 00A0). Я в целом доволен этим, но обнаружил, что часто случайно пишу NBSP вместо обычного пробела после символа "|" (записанного с помощью AltGr + < с финской раскладкой клавиатуры) при использовании командной строки bash. Я предполагаю, что это связано с тем, что мне нужно удерживать AltGr при наборе канала и освобождать его перед ударом пробела. И когда у меня плохое время для выпуска AltGr , я получаю невидимую опечатку в командной строке и сообщения об ошибках, такие как

 grep: command not found

, который выглядит очень похоже на

grep: command not found

, что делает эту проблему немного трудно заметить в первый раз.

Я знаю, что могу отключить NBSP , но я бы предпочел отключить его (имея AltGr + Space для получения обычного пространства) только после символа канала или, если это невозможно, всегда в командной строке bash или на уровне readline. Есть ли простой способ сделать это без изменения исходного кода bash, readline или моего эмулятора терминала (gnome-terminal)?

Другим хорошим решением было бы настроить NBSP на как-то видно в командной строке, например заменен другим символом (скажем, U + 2423 ) только для рендеринга.

10
задан 29 May 2019 в 10:17

2 ответа

Это можно сделать на уровне readline двумя различными способами.

Метод 1

Поместите в .inputrc следующее (файл конфигурации для readline ):

# include default system config because ~/.inputrc overrides system config
$include /etc/inputrc
# map NBSP to regular space (left part has NBSP in quotes, right part has space)
" ":" "

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

Метод 2

Добавьте в .inputrc следующее:

# include default system config because ~/.inputrc overrides system config
$include /etc/inputrc
# map "pipe + NBSP" to "pipe + regular space" (left part has NBSP in quotes)
"| ":"| "
set keyseq-timeout 250

Идея состоит в том, чтобы отобразить последовательность клавиш {pipe, за которой следует NBSP}, в {pipe, а затем пробел}. Это работает, если вы набираете последовательность в течение 250 мс (настраивается выше). Тем не менее, пока не истечет тайм-аут, один только ввод символа канала ничего не выведет. И если вы введете последовательность слишком медленно, исправление не будет применено. Также обратите внимание, что время ожидания является глобальным, поэтому, если вы намереваетесь использовать любые другие последовательности, вы должны установить время ожидания достаточно длительное, чтобы можно было набрать самую длинную последовательность. (Библиотека readline не достаточно умна, чтобы позволять вводить символы и позже заменять уже видимые символы после того, как последовательность символов соответствует конфигурации.)

0
ответ дан 29 May 2019 в 10:17

Есть отличная статья, посвященная этой проблеме:

Я пытался устраните основную проблему с помощью сообщений об ошибках grep и измените NBSP на что-то более заметное с помощью команды exec. У меня пока нет синтаксиса:

exec 2> >(tr  

Идея состоит в том, чтобы эта команда была в ~/.bashrc, чтобы она автоматически загружалась с открытием gnome-terminal. Но, как я уже сказал, это еще не работает ...

\xa0'

Идея состоит в том, чтобы эта команда была в ~/.bashrc, чтобы она автоматически загружалась с открытием gnome-terminal. Но, как я уже сказал, это еще не работает ...

\x43' >&2)

Идея состоит в том, чтобы эта команда была в ~/.bashrc, чтобы она автоматически загружалась с открытием gnome-terminal. Но, как я уже сказал, это еще не работает ...

0
ответ дан 29 May 2019 в 10:17

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

Похожие вопросы: