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

Posted on:

ov-highlight1 ov-highlight1

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

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

情報

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

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

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

提案の方向性には共感する部分が多くあります。特に「重要ではない要素を目立たせすぎない」という視点は、実際のコード読解でも有効です。 ところが、どの要素を重要とみなすかは、そのときに何を読みたいかによって変わります。 コメントが重要なときもあれば、文字列が重要なときもあります。キーワードが重要なときもあれば、区切りが重要なときもあります。

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

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

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

幸いにも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

入力は、即時に反映されます。逆にESCで抜けてもキャンセルにはならないので、間違えた場合は入力した分を削除して再入力してください。

style.gif style.gif

見づらい色を抑制

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

ov-highlight1.gif ov-highlight1.gif

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

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

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

highlight -O truecolor oviewer/oviewer.go | ov

ov-highlight7 ov-highlight7

使い分けパターン

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

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

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

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

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

まとめ

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

参考