ovのシンタックスハイライトの考え方

Posted on:

ov-highlight1 ov-highlight1

シンタックスハイライトの考え方

ovにはシンタックスハイライト機能がありません。 しかしながら、batなどのシンタックスハイライト機能を持つコマンドのページャーとして使用されることは想定しています。

シンタックスハイライト機能がないのは、様々な言語をサポートするのが大変という理由もありますが、万人が満足するシンタックスハイライトを提供するのは難しいという理由もあります。

まったく色付けされていないコードは見づらいという意見には同意しますが、シンタックスハイライトは多くの場合、過剰に色付けされていることが多く、かえって見づらい場合があります。

この問題を解決するべく、提案されている方もいます。

提案の方向性には共感する部分が多くあります。特に「重要ではない要素を目立たせすぎない」という視点は、実際のコード読解でも有効です。 一方で、何を重要とみなすかは、タスクや文脈で大きく変わります。 実装バグを追っているとき、設計意図を読んでいるとき、SQLの条件式だけを追いたいときでは、見たい要素が違います。

シンタックスハイライトの抑制

そこで考え方を変えることにしました。

どう色付けするかではなく、すでに色付けされたコードのそのとき重要ではない部分の色付けを減らせばいいのではないかと考えました。

幸いにもovはページャーなので、一度表示した後も表示を切り替えることが可能です。そして、その前に実装していたサイドバー機能により目で確認しながら切り替えるUIを提供できます。

oを押すと、ハイライトされたスタイルの一覧が表示されToggle styles:という入力モードになります。そこでStylesの番号を指定することで、ハイライトの抑制もできます。

ov-highlight2 ov-highlight2

番号だけでなく、ショートカットキーもあります。Toggle styles:という入力モードでは、oはすべてのハイライトを抑制、aはすべてのハイライトを有効化、iは現在の状態を反転します。 例えば、1番のみ有効化したい場合は、o1と押すことで、1番のみ有効化できます。

ov-highlight3 ov-highlight3

番号を複数指定する場合は’,‘で区切ります。例えば、o1,3と押すことで、1番と3番のみ有効化できます。 番号の範囲でも指定できます。例えば、o1-3と押すことで、1番から3番まで有効化できます。

ov-highlight4 ov-highlight4

見づらい色を抑制

また、単純にターミナルのテーマ色によっては、シンタックスハイライトで見づらい色が使われている場合に、その色を狙って抑制するといった使い方もできます。

ov-highlight5 ov-highlight5

ov-highlight6 ov-highlight6

シンタックスハイライトのアプリケーションを変更

この機能は、bat専用ではありません。エスケープシーケンスで表現するアプリケーションであれば、ovのシンタックスハイライト抑制機能を使用できます。

例えば、伝統的なhighlightコマンドも、ovのシンタックスハイライト抑制機能を使用できます。

highlight -O truecolor oviewer/oviewer.go | ov

ov-highlight7 ov-highlight7

使い分けパターン

読む目的に応じて、抑制の方針を変えると効果的です。

  1. 構文構造を追いたいとき キーワードや区切りの視認性を優先して、装飾的な色を抑えます。

  2. 文字列やコメントの差分を追いたいとき 逆に文字列やコメント側を残し、他を減らしてノイズを下げます。

  3. 端末テーマと配色が衝突しているとき 見づらい色を担うスタイルだけを狙って抑制します。

このように、シンタックスハイライトが過剰に色付けされている場合でも、ovを使うことで、重要な部分だけを色付けすることができます。

限界と注意点

この方法は万能ではありません。 前提として、入力元ツールがどのように色を割り当てているかに依存します。 あらかじめ抑制した状態で表示することはできません。あくまで、すでに色付けされた情報から、今必要な情報を取り出すための手段です。

まとめ

ovの役割は「最適な色付けを決めること」ではなく、「すでに色付けされた情報から、今必要な情報を取り出しやすくすること」にあります。 シンタックスハイライトを足すのではなく、引くことで読む体験を整える、というのがこの機能の狙いです。