できない.dev

VSCode で settings.json の設定が反映されない

VSCode の設定は User / Workspace / Folder / Remote の優先順位で上書きされる。
Workspace に同名キーがあれば User 側は負ける。
JSON の構文ミスや Profile 違いも頻出。
優先順位と編集対象を把握すれば大半は解消する。

#vscode#settings#json#workspace#profile

要約

VSCode の設定が効かないときは、まず どの settings.json が読まれているか を疑う。
優先順位は Default < User < Remote < Workspace < Folder < Language scope で、上書きされていれば下位の値は反映されない。
Profile 切り替えや Remote セッションでは別の settings.json が使われ、JSON 構文エラーがあると設定全体が黙って失効することもある。

よくある原因

  1. Workspace 設定が User を上書き: .vscode/settings.json に同じキーがあると、こちらが勝つ。
    チームで共有する設定はここに、個人色は User 側に分けるのが原則。
  2. Remote と Local で別物: Remote-SSH / WSL で開いたウィンドウは別の settings.json を読む。
    Local の変更が反映されないように見える典型例。
  3. Profile 違い: VSCode の Profile 機能で別プロファイルに切り替わっていると、別の User 設定が使われる。
  4. JSON 構文エラー: 末尾カンマや未閉じ括弧があると VSCode はその settings.json を丸ごと無視する(通知が出ないことも多い)。
  5. Language scope の上書き: [typescript] ブロックで editor.formatOnSave を false にしていると、全体設定の true は当該言語では効かない。

解決策

1. 編集対象を明示して開き直す

Ctrl+Shift+P から:

Preferences: Open User Settings (JSON)
Preferences: Open Workspace Settings (JSON)
Preferences: Open Remote Settings (JSON)

公式の Settings ドキュメント のとおり、これらは別ファイルで優先順位も異なる。
Workspace 側が空ファイルになっていて User 側に書いていなかった、というケースが意外と多い。

2. 構文エラーを確認する

Problems パネル(Ctrl+Shift+M)と Output パネルの Log (Window) に JSON のパースエラーが出ていれば、その settings.json は読まれていない。
末尾カンマや "key": の値欠落を直す。

3. Profile を確認する

ステータスバー右下のアイコンに表示される名前が現在の Profile。Profiles: Switch Profile で意図したものに戻す。
Profile ごとに拡張機能・User 設定・キーバインドが分かれる仕様は 公式の Profiles ドキュメント を参照。

4. Language scope を確認

{
  "editor.formatOnSave": true,
  "[markdown]": {
    "editor.formatOnSave": false
  }
}

Settings UI の対象設定を選び、左下に出る Modified in: ... 表示で、どのレイヤで上書きされているかが確認できる。
Language scope が当たっていれば、その言語のみ別値が使われている。

この記事は役立ちましたか?