📝

[VSCode]txt の色付けを C# と同じにしたい

に公開

非常にニッチな要件ですが、業務で必要だったので作成してみました。お手製拡張機能です。

拡張機能のフォルダ

作業前に実行中の VSCode を閉じておいてください。

C:\Users\[ユーザー名]\.vscode\extensions がデフォルトの保管場所です。
(Mac であれば ~/.vscode/extensions/

事前確認

ms-dotnettools.csharp-X.XXX.XX-win32-x64/ フォルダがあること。
(拡張機能 C# がインストールされていること)

csharp-txt-highlight-0.0.1 を作成

以下の構成でファイルを配置してください。json の中身は下記をコピペ。

extensions/csharp-txt-highlight-0.0.1
  ├ language-configuration.json
  ├ package.json
  └ syntaxes/
     └ csharp-txt.tmLanguage.json

language-configuration.json

{
  "comments": {
    "lineComment": "//",
    "blockComment": ["/*", "*/"]
  },
  "brackets": [
    ["{", "}"],
    ["[", "]"],
    ["(", ")"]
  ],
  "autoClosingPairs": [
    { "open": "{", "close": "}" },
    { "open": "[", "close": "]" },
    { "open": "(", "close": ")" },
    { "open": "\"", "close": "\"", "notIn": ["string"] },
    { "open": "'", "close": "'", "notIn": ["string", "comment"] }
  ],
  "surroundingPairs": [
    ["{", "}"],
    ["[", "]"],
    ["(", ")"],
    ["\"", "\""],
    ["'", "'"]
  ]
}

package.json

{
  "name": "csharp-txt-highlight",
  "displayName": "C# style highlight for .txt (no diagnostics)",
  "description": "C# 風のシンタックスハイライトだけを .txt に適用し、C# のエラーチェックは行わないための簡易言語拡張。",
  "publisher": "local-user",
  "version": "0.0.1",
  "engines": {
    "vscode": "^1.80.0"
  },
  "categories": [
    "Programming Languages"
  ],
  "contributes": {
    "languages": [
      {
        "id": "csharp-txt",
        "aliases": ["C# Text", "csharp-txt"],
        "extensions": [
          ".cs.txt"
        ],
        "configuration": "./language-configuration.json"
      }
    ],
    "grammars": [
      {
        "language": "csharp-txt",
        "scopeName": "source.csharp-txt",
        "path": "./syntaxes/csharp-txt.tmLanguage.json"
      }
    ]
  }
}

csharp-txt.tmLanguage.json

{
  "scopeName": "source.csharp-txt",
  "patterns": [
    {
      "include": "source.cs"
    }
  ]
}

VSCode 再起動

再起動し、拡張機能を確認すると次のような拡張機能がインストールされています。

settings.json

最後に、settings.json にて拡張子 txt と拡張機能をリンクさせます。

    "files.associations": {
        "*.txt": "csharp-txt"
    },

Discussion