• ..

Shell

    ある除外パターンを除外して検索

    ディレクトリは以下のようになっていて、どちらとも中身にfooと書いてあるとします。

    .
    ├── a.txt
    └── b.txt

    foo で検索

    これはa.txtb.txtどちらも表示されます。

    あるパターンのファイルを除外したい

    b.txtを対象から外してみたいです。これは、files to excludeの入力欄に除外したいファイルのパターンをカンマ区切りで書いていくことで、そのパターンにマッチするファイルは表示対象から外されます。

    b.txtを対象から外すようにできました。

    常にあるパターンのファイルを除外したい

    上記の方法だと検索のたびにb.txtを除外するという設定を書かないといけないので、常に除外したい場合はローカル設定ファイルを作ると楽です。これは.vscode/settings.jsonを作成し、search.excludeを設定します。 ここで設定した Glob パターン(値trueのもの)が常にfiles to excludeの入力欄に入るイメージです。中身はこんな感じになります。

    {
      "search.exclude": {
        "**/node_modules": true,
        "b.txt": true
      }
    }

    設定後は再起動が必要かもです。(>Developer: Reload window

    files to excludeの入力欄は空ですが、除外することができました。

    JSON Schema 設定を追加する

    ローカルのsettings.jsonjson.schemasという項目を置きます。

    settings.json を作る

    VSCode はプロジェクトルートに置かれているvscode/settings.jsonファイルを自動で読み込み、設定に適用してくれるので、とりあえずこれを以下のような内容で作ります。

    {
      "json.schemas": []
    }

    この配列は、

    type Schema =
      | {fileMatch: string[], url: string}
      | {fileMatch: string[], schema: object}

    なオブジェクトで構成された配列になります。

    fileMatch

    fileMatchは文字列な配列で、その JSON スキーマを適用するファイルのパターンやパスを置きます。今回のようなローカルのsettings.jsonの場合は/はプロジェクトルートになります。

    [
      {
        "fileMatch": [
          "/foo/**/xxx.json",
          "/absolute/aaa/xxx.json
        ],
      }
    ]

    url

    スキーマファイルへのパスまたは URL を置きます。このパスの場合も、ローカルのsettings.jsonの場合は/はプロジェクトルートになりますので、/.../.../xxx.jsonのように絶対パスで指定します。
    URL の場合は、JSON スキーマを提供している URL を設定します。例えば、npm のpackage.jsonのスキーマであれば、http://json.schemastore.org/packageという URL を置くと良いです。

    [
      {
        "fileMatch": ["**/*"],
        "url": "http://json.schemastore.org/package"
      }
    ]

    schema

    これはurlプロパティを設定しない時に必要です。単に JSON スキーマをこのオブジェクトの中に記述していきます。

    [
      {
        "fileMatch": ["**/*"],
        "schema": {
          "type": "object"
        }
      }
    ]

    関連エラー

    Request vscode/content failed unexpectedly without providing any details.(768)

    自身のものを使う時はどこか参照できる URL などに置くと思いますが、その URL が302リダイレクトなどしている場合上のメッセージのように読み込んでくれません。これはリダイレクト先の URL を記述することによって直ります。

    僕の場合怒ったのは、npm に公開してunpkg.comから取得しようとした時です。https://unpkg.com/nju33/xxx/foo.jsonという URL はhttps://unpkg.com/nju33/xxx@0.0.0/foo.jsonのような URL へリダイレクトする設定となっていた為です。

    ちょっと不便ですね,,,

    JSON Schema を YAML にも効くようにする

    redhat.vscode-yamlという拡張が必要なので VSCode に入れます。

    settings.jsonを開きyaml.schemasというプロパティを追加します。これのプロパティにはスキーマ定義 JSON へのパスや URL を設定し、値に対象となるファイルにマッチする文字列を書きます。

    例えばこれはhttps://example.com/foo.jsonという所から取得できるスキーマをfoo.ymlに適用する例です。

    {
      "yaml.schemas": {
        "https://example.com/foo.json": [
          "foo.yml"
        ]
      }
    }

    json.schemasの設定方法と違っているので注意。

    あるファイルを開いた時の言語設定を指定する

    例えば.*rcファイルとかであまり有名じゃない設定ファイルなどは、そのままでは JSON 言語とは解釈されずにシンタックスハイライトが付かないものがあります。

    JSON と解釈されなければ、 JSON Schema も適用できないので、どんな.*rcファイルを開いた時でも JSON 言語としてくれる設定を設定します。

    files.associations

    設定ファイルにfiles.associationsセクションを追加(追記)します。

    コマンドパレットで>Preferences: Open Settings (Json)と入力して、同じコマンド名のものを確定するとグローバルなsettings.jsonが開くので、この中に以下のように書きます。

    {
      "files.associations": {
        "ファイル名かパターン": "設定してほしい言語"
      }
    }

    .*rc ファイルすべてが JSON シンタックスとは限らない

    .browserslistrcなど JSON ではない設定ファイルがあるので実際には.*rcで設定するのはおすすめしません。

    以下のようなパターンでホワイトリストのような形でパターンを設定するといいと思います。これはhuskylintstagedrenovate.*rcファイルを JSON 言語に設定します。

    {
      "files.associations": {
        ".{husky,lintstaged,renovate}rc": "json"
      }
    }