ИМХО эта подсветка легче реализовать в эмуляторе терминала, чем в оболочке. И в качестве преимущества вы получаете подсветку, независимую от оболочки - так что она даже работает с less и т.д. Поскольку вы хорошо переключаете оболочку, я полагаю, что вы также можете переключиться на URxVt .
В сочетании с расширениями perl urxvt-perls можно сделать URL-адреса кликабельными. Но мы можем злоупотреблять этой функцией, чтобы подчеркнуть неразрывные пробелы.
Конфигурация выполняется в ~/.Xdefaults:
URxvt.perl-ext: default,matcher
URxvt.matcher.button: 2
URxvt.matcher.pattern.0: (\\240)
URxvt.matcher.launcher.0: /bin/true
- строка 1 активирует соответствующее расширение
- строка 2 настраивает использование средней кнопки мыши для нажатия на гиперссылку
- строка 3 определяет регулярное выражение для сопоставления, здесь каждый неразрывный пробел;
A0 (hex) = 240 (oct)
- строка 4 определяет действие, в вашем случае вы не хотите открывать браузер или любую программу, поэтому
/bin/true должно быть в порядке
Перезагрузить ~/.Xdefaults X перезапускает X-сервер (это может быть излишним, но я не уверен, что xrdb ~/.Xdefaults достаточно ...) и вы получите желаемый результат. С помощью лупы можно даже отличить неразрывные пробелы от подчеркивания (обратите внимание на смещение на 1 пиксель) ;):

Следующее является своего рода доказательством концепции "внутреннего" решения. Имейте в виду, что это сломает много вещей, а именно интерактивные программы, такие как man , less и т.д. (vim жалуется, но все еще работает). Этот подход был опубликован Atom Smasher в zsh-users в субботу 16 мая 2009 года для раскрашивания STDERR . Я принял это к вашим требованиям:
# ## highlight_nbs.zsh ##
zmodload zsh/terminfo zsh/system
autoload colors is-at-least
if [[ "${terminfo[colors]}" -ge 8 ]] { colors }
highlight_nbs() {
while sysread line
do
syswrite "${line//$'\xC2\xA0'/${bg[red]} ${terminfo[sgr0]}}"
done
}
precmd() { sleep 0 }
## i'm not sure exactly how far back it's safe to go with this
## 4.3.4 works; 4.2.1 hangs.
is-at-least 4.3.4 && exec > >(highlight_nbs)
Сложная часть - exec > >(highlight_nbs) которая обрабатывает полный вывод замещающей оболочки через функцию highlight_nbs . Определение precmd необходимо, чтобы избежать условия гонки, в противном случае новое приглашение выводится перед фактическим выводом выполненной команды.
Вот демо:
