ИМХО эта подсветка легче реализовать в эмуляторе терминала, чем в оболочке. И в качестве преимущества вы получаете подсветку, независимую от оболочки - так что она даже работает с 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
необходимо, чтобы избежать условия гонки, в противном случае новое приглашение выводится перед фактическим выводом выполненной команды.
Вот демо: