はじめに

Visual Studioのエディタについて、シンタックスハイライトの設定がイマイチだったので、変更しました。その際の、設定方法や変更後の設定について書きます。

前提

話を始める前提として、以下の環境にしてあるものとします。

  • Visual Studio 2017 (Windows版です)
  • Tools > Options... > Environment > GeneralのColor themeは、Darkに設定
  • Tools > Import and Export Settings...で、Reset all settings (Default Collection of SettingsはVisual C#かVisual C++)をした状態

変更の動機

文句があったのはC++の設定です。(C#はそのままで大丈夫でした。)
使われていない(宣言・定義したが読み出されていない)変数を、グレーアウトして教えてくれる機能があります。下記のコードでは、usedParameterに対して、unusedParameterがより暗い色で表示されています。更に、usedLocalVariableに対してunusedLocalVariableがより暗い色で表示されています。
image.png

ここで、問題点として、このコードでは、

  • 使われているパラメータusedParameter
  • 使われていないローカル変数unusedLocalVariable

がほぼ同じ色で表示されており、使われているのか使われていないのか、紛らわしい表示になっています。この紛らわしい表示を解消することが、シンタックスハイライトの設定変更の動機です。

シンタックスハイライトの変更方法

大まかに3つ方法があります。

Visual Studio全般のColor themeを設定

冒頭の前提で、Color themeをDarkで設定したように、例えばこれをBlueにすると、次のような表示になります。
image.png
usedParameterunusedLocalVariableの見分けがつくようになります。
ただし、黒さがusedLocalVariable > usedParameter > unusedParameter == unusedLocalVariableとなるので、usedLocalVariableusedParameterだけを比較すると、まるでusedParameterが使われていないかのように見えます。単なる慣れの問題かもしれませんが。
更に、エディタに限らずVisual Studioが全般的に白色ベースになるので、個人的には明るすぎます。他にもBlue (Extra Contrast)とLightがありますが、いずれにしても白色ベースです。よって、Darkままで行きたいので、この案は採用できません・・・。

各項目ごとに設定

C++

Tools > Options... > Environment > Fonts and Colorsで、Show setting for:をText Editorに設定すると、Display items:の欄に「C/C++ User Keywords」、「C++ Class Templates」などがあり、項目ごとにフォント・色を設定できます。「変更の動機」で紹介した件では、「C++ Parameters」と「C++ Local Variables」を設定すればよいことになります。

C#

C#では、ReSharperをインストールしない限り、「各項目ごとに設定」はできないようです。参考: Visual Studio change C# method parameter colouring - Stack Overflow

.vssettingsファイルを読み込む

Studio Styles - Visual Studio color schemesには、先人たちがシェアしてくれているシンタックスハイライトの設定ファイルがあります。好きなものを探して、ダウンロードして、Tools > Import and Export Settings...から読み込めばよいです。
ちなみに、.vssettingsファイルはXML形式ですので、例えば、Plain Textの色の設定は

<Item Name="Plain Text" Foreground="0x00C8C8C8" Background="0x00232323" BoldFont="No"/>

と書かれています。ここのForegroundを直接編集して狙った色にすることも出来ます。

変更後の設定

試行錯誤の末、私は次のように設定しました。

  1. Tools > Import and Export Settings...から、1 == (Son of Obsidian + GrayZ) \ 2;をダウンロード
  2. ダウンロードした1-son-of-obsidian-grayz-2_vs2015.vssettingsの"String""string - verbatim"Foreground"0x0036CDFF"に編集("Number"の色に合わせました。)

    <Item Name="String" Foreground="0x0036CDFF" Background="0x02000000" BoldFont="No"/>
    <Item Name="string - verbatim" Foreground="0x0036CDFF" Background="0x02000000" BoldFont="No"/>
    
  3. Tools > Import and Export Settings...から、編集後の1-son-of-obsidian-grayz-2_vs2015.vssettingsを適用

  4. Tools > Options... > Environment > Fonts and Colorsで、「Plain Text」のItem background:をBlackに設定

こうすると、次のような色合いになります。
image.png
これで、使われているのかどうか紛らわしい件はOKです。

単に「各項目ごとに設定」する方法で「C++ Parameters」と「C++ Local Variables」を変更しなかったのは、この際に自分の好きなThemeにしたかったからです。次の個人的な好みを意識しています。

  • 背景色と文字の高いコントラスト
  • 赤色系は一切使用しない(エラーと思うからです)
  • リテラルは目立つ色
  • クラス、メンバ、ローカル変数を区別できる色具合(逆にいえば、全て白色というのはダメです)

おわりに

良い設定があれば、ぜひ紹介していただけると助かります。