Git の contrib/diff-highlight を使って行単位ではなく文字列単位で異なる部分をハイライトしてくれるという記事を教えてもらった。
自分の設定では .gitconfig の color のところは
[color] branch = auto diff = auto grep = auto interactive = auto showbranch = auto status = auto
となっていて pager 指定は .bashrc で
if command -v lv > /dev/null; then export GIT_PAGER='lv -Ou8 -c' fi
と今している。diff-highlight*1 を PATH の通っているところにおいて、
GIT_PAGER='diff-highlight | less -R' git diff HEAD~..HEAD
とかすると文字列単位で差分が反転色で表示される。
lv だと \x1b[7m で反転させるとそれまでの色属性が落とされてしまうのか、行のそれ以降が黒白/白黒になってしまう。 lv v.4.21*2 のソースコードを軽くみたけどちょっとしっかり読まないと対応できなさそうなので、今日は諦め。
diff-highlight は Perl スクリプトなので、こちらでハイライト開始とハイライト終了時のエスケープシーケンスをいじって lv で見栄え良くなるようにするのが簡単でいいかもなあ。
*1Debian GNU/Linux だと /usr/share/doc/git/contrib/diff-highlight/diff-highlight にある
*2(Debian GNU/Linux だと v.4.51.a が入っているので、見たのはちょっと古いバージョンだった模様)
Naney (なにい)です。株式会社ミクシィで SNS 事業の部長をしています。
nDiki は1999年1月に始めたコンピュータ日誌を前身とする Naney の Web 日記(兼パーソナルナレッジベース)です。ちょっとしたノートは nNote にあります。
※内容は個人的見解であり所属組織とは関係ありません。