この強調表示は、シェルよりもターミナルエミュレータで簡単に実装できます。また、利点として、シェルから独立した強調表示が得られるため、less
でも動作します。 etc.シェルを切り替えて大丈夫なので、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 サーバーを再起動する (これはやり過ぎかもしれませんが、xrdb ~/.Xdefaults
で十分です...)そして、あなたが望む結果が得られます。拡大鏡を使用すると、分割できないスペースとアンダースコアを区別することさえ可能です (1 ピクセルのずれに注意してください) ;)
:
以下は、概念実証のようなものです 「バックエンド」ソリューション用。これは多くのもの、特に man
のようなインタラクティブなプログラムを破壊することに注意してください 、 less
など (vim
不平を言っていますが、まだ機能しています)。このアプローチは、Atom Smasher によって zsh-users
に投稿されました。 2009 年 5 月 16 日土曜日のメーリングリスト 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
競合状態を避けるために定義が必要です。そうしないと、実行されたコマンドの実際の出力の前に新しいプロンプトが出力されます。
デモはこちら: