Skip to main content

Profiles and Settings Sync

How I use VS Code profiles across machines, the Settings Sync gotcha that drops R settings, what Sync does not carry, and my Default and R-Lecturer profiles.
Modified

November 9, 2026

Profiles

A profile is a complete VS Code set-up: settings, keybindings, snippets, tasks, extensions and UI state. Each folder remembers which profile it was last opened with.

Profile Used for
R All daily R work, on every machine. The one documented on Settings, Keybindings and Extensions.
R-Lecturer Teaching: VS Code’s defaults plus what is needed to run R. See below.
Default Folders that are not R projects, and the place for application-wide settings (see below).

My other profiles are unrelated to R and not covered here.

Profiles do not inherit

A non-default profile’s settings.json replaces the Default one; it is not layered on top. Precedence is:

  1. VS Code’s built-in defaults,
  2. the active profile’s settings (Default or R or R-Lecturer, never a mix),
  3. the workspace settings (.vscode/settings.json in the project).

So every profile must contain everything it needs. That is why the R profile repeats most of the Default settings.

The one exception is application-scoped settings, such as update.mode and settingsSync.ignoredSettings. They apply to the whole VS Code installation and are read only from the Default profile; other profiles show them greyed out.

Where the files are

What Path
Default profile settings %APPDATA%\Code\User\settings.json
Other profiles %APPDATA%\Code\User\profiles\<profile id>\settings.json (also keybindings.json, tasks.json, snippets\)
Profile names, and which folder uses which profile %APPDATA%\Code\User\globalStorage\storage.json

To move a folder to another profile, open it and pick the profile in the gear menu (bottom left).

Settings Sync

Settings Sync keeps profiles, settings, keybindings, snippets, tasks, extensions and UI state the same on every machine where you sign in. Change a setting once, on any machine, and it travels. That only works if the synced files contain no machine-specific paths (How the pieces fit).

The gotcha: some settings never sync

Sync silently skips three kinds of settings:

  • those marked machine (they only make sense on one computer),
  • those marked machine-overridable,
  • those flagged never to sync by their extension.

vscode-R marks several of its settings like that: r.consolePath, r.executablePath, r.consoleArgs, r.consoleSendDelay and r.plot.backend.

The fix is the settingsSync.ignoredSettings list. A leading - means “include this after all”:

"settingsSync.ignoredSettings": ["-r.consolePath", "-r.plot.backend"]
  • It must be in the Default profile, where VS Code reads application-scoped settings. I keep the same line in each synced profile as well.
  • To see what was uploaded: Settings Sync: Show Synced Data.

The two settings it opts back in are safe to sync because they hold no paths: r.consolePath is just "radian" (found on PATH), and r.plot.backend is "httpgd".

What Settings Sync does not carry

Not synced Where it lives How I keep it in step
R, Rtools, Python, radian, Quarto, R packages installed per machine Install, in order, the same versions everywhere
PATH and environment variables Windows the PATH rules
Task scripts %USERPROFILE%\.vscode-scripts\ copied by hand (Snippets and tasks)
.Rprofile Documents\.Rprofile OneDrive shares the Documents folder (Outside VS Code)
PowerShell profiles Documents\PowerShell\ OneDrive, as above
Which folder uses which profile storage.json set per machine (gear menu)

The Default profile

Same as in the R profile

These keys have the same values as in the R profile and are explained on Settings.

Show the keys

[quarto], claudeCode.hideOnboarding, diffEditor.ignoreTrimWhitespace, editor.accessibilitySupport, editor.defaultFormatter, editor.guides.bracketPairs, editor.inlineSuggest.enabled, editor.minimap.autohide, editor.minimap.maxColumn, editor.minimap.renderCharacters, editor.minimap.scale, editor.rulers, editor.stickyScroll.enabled, editor.tabSize, files.associations, git-graph.commitDetailsView.location, git-graph.date.type, git.autofetch, git.confirmSync, git.suggestSmartCommit, githubPullRequests.fileListLayout, githubPullRequests.pullBranch, markdown.extension.toc.updateOnSave, quarto.mathjax.theme, quarto.render.previewReveal, r.alwaysUseActiveTerminal, r.bracketedPaste, r.consolePath, r.debugger.timeouts.startup, r.lsp.debug, r.lsp.diagnostics, r.plot.backend, r.plot.defaults.fullWindowMode, r.sessionWatcher, r.source.focus, resmongraphical.cpuusage.style, security.workspace.trust.untrustedFiles, settingsSync.ignoredSettings, terminal.integrated.cursorBlinking, terminal.integrated.cursorStyle, terminal.integrated.defaultProfile.windows, terminal.integrated.fontWeightBold, todo-tree.ripgrep.ripgrep, vsicons.dontShowNewVersionMessage, window.commandCenter, workbench.iconTheme, workbench.list.openMode, workbench.panel.defaultLocation.

Different from the R profile, or only here

Setting Value What it does
workbench.colorTheme "Visual Studio 2019 Dark" Colour theme.
editor.unicodeHighlight.nonBasicASCII true Highlights non-ASCII characters.
[markdown] markdownlint as formatter Formats Markdown with markdownlint.
editor.formatOnPaste true Formats pasted code.
remote.SSH.remotePlatform "linux" for each of my servers Tells Remote - SSH the OS of each server, so it does not ask.
update.mode "start" Checks for VS Code updates only at start-up.
update.enableWindowsBackgroundUpdates false Does not download and install updates in the background.
window.menuBarVisibility "classic" Always shows the menu bar.
grammarly.files.include Markdown, text, R, Quarto, R Markdown Files Grammarly checks.
grammarly.config.documentDialect "british" British English.
grammarly.config.documentDomain "academic" Academic writing style.
grammarly.config.suggestions.OxfordComma true Suggests the Oxford comma.
grammarly.startTextCheckInPausedState true Grammarly starts paused; turn it on when writing.
chatgpt.localeOverride "en-US" Codex extension (openai.chatgpt): the language of its interface.
mssql.enableRichExperiences true Newer UI of the SQL Server extension.
Show the full file: Default profile settings.json
{
  // workspace, workbench and window settings
  "workbench.panel.defaultLocation": "right", // if you like 3-column layout
  "security.workspace.trust.untrustedFiles": "open",
  "window.commandCenter": true,
  "workbench.iconTheme": "vscode-icons",
"workbench.colorTheme": "Visual Studio 2019 Dark",
  "vsicons.dontShowNewVersionMessage": true,
  "workbench.list.openMode": "doubleClick",
  // terminal setting
  "terminal.integrated.cursorStyle": "underline",
  "terminal.integrated.cursorBlinking": true,
  "terminal.integrated.defaultProfile.windows": "R Terminal",
  "terminal.integrated.fontWeightBold": "normal",
  // editor
  "editor.stickyScroll.enabled": true,
  "editor.formatOnPaste": true,
  "editor.unicodeHighlight.nonBasicASCII": true,
  "editor.tabSize": 2,
  "editor.defaultFormatter": "REditorSupport.r",
  "editor.inlineSuggest.enabled": true,
  "editor.guides.bracketPairs": "active", // adds guides to matching brackets
  "editor.rulers": [
    80
  ],
  // make sure ".rmd" files are treated as R Markdown
  "files.associations": {
    "*.rmd": "rmd"
  },
  // git settings
  "git.autofetch": true,
  "git.confirmSync": false,
  "git.suggestSmartCommit": false,
  "git-graph.commitDetailsView.location": "Docked to Bottom",
  "git-graph.date.type": "Commit Date",
  "diffEditor.ignoreTrimWhitespace": false,
  // r settings
  "r.alwaysUseActiveTerminal": true,
  "r.bracketedPaste": true,
  "r.consolePath": "radian", // found on PATH; R comes from rig's default
  "r.source.focus": "editor",
  "r.sessionWatcher": true,
  "r.plot.backend": "httpgd",
  "r.plot.defaults.fullWindowMode": true,
  "r.lsp.debug": true,
  "r.lsp.diagnostics": true,
  "r.debugger.timeouts.startup": 20000,
  "quarto.mathjax.theme": "dark",
  // github settings
  "githubPullRequests.fileListLayout": "tree",
  "githubPullRequests.pullBranch": "never",
  // remote setting
  "remote.SSH.remotePlatform": {
    "server-1.example.org": "linux",
    "server-2.example.org": "linux",
    "server-3.example.org": "linux",
    "server-4.example.org": "linux"
  },
  // resource manager
  "resmongraphical.cpuusage.style": "Vertical",
  // markdown and qurto
  "[markdown]": {
    "editor.defaultFormatter": "DavidAnson.vscode-markdownlint"
  },
  "quarto.render.previewReveal": true,
  "editor.accessibilitySupport": "off",
  "grammarly.files.include": [
    "**/readme.md",
    "**/README.md",
    "**/*.txt",
    "**/*.md",
    "**/*.R",
    "**/*.r",
    "**/*.qmd",
    "**/*.Rmd"
  ],
  "grammarly.config.suggestions.OxfordComma": true,
  "grammarly.config.documentDialect": "british",
  "grammarly.config.documentDomain": "academic",
  "grammarly.startTextCheckInPausedState": true,
  "editor.minimap.autohide": "mouseover",
  "editor.minimap.maxColumn": 80,
  "editor.minimap.renderCharacters": false,
  "editor.minimap.scale": 2,
  "[quarto]": {
    "editor.defaultFormatter": "quarto.quarto"
  },
  "markdown.extension.toc.updateOnSave": false,
  "window.menuBarVisibility": "classic",
  "mssql.enableRichExperiences": true,
  "update.mode": "start",
  "update.enableWindowsBackgroundUpdates": false,
  "chatgpt.localeOverride": "en-US",
  "claudeCode.hideOnboarding": true,
  // Settings Sync skips these two by default; "-" makes it sync them.
  "settingsSync.ignoredSettings": ["-r.consolePath", "-r.plot.backend"],
  "todo-tree.ripgrep.ripgrep": "C:\\Program Files\\WinGet\\Links\\rg.exe"
}

Download settings.json

The R-Lecturer profile

My teaching profile keeps VS Code’s defaults and adds only what is needed to run R:

  • radian as the R console and httpgd for plots (r.consolePath, r.bracketedPaste, r.plot.backend; needs the httpgd R package), with the same settingsSync.ignoredSettings line as R;
  • the Light Modern theme, for the projector;
  • no Copilot completions;
  • Quarto previews in the browser, and the visual editor wraps at 80 columns and spell-checks in British English.

Its only extensions are vscode-R (reditorsupport.r, reditorsupport.r-syntax) and Quarto (quarto.quarto); Copilot Chat ships with VS Code. It has no keybindings, tasks or snippets of its own.

Show the full file: R-Lecturer settings.json
{
  // Teaching profile: VS Code defaults plus what is needed to run R.

  // R: radian on PATH as the console, plots in the httpgd viewer
  // (needs the httpgd R package).
  "r.consolePath": "radian",
  "r.bracketedPaste": true,
  "r.plot.backend": "httpgd",
  // Settings Sync skips these two by default; "-" makes it sync them.
  "settingsSync.ignoredSettings": ["-r.consolePath", "-r.plot.backend"],

  // Light theme for the projector.
  "workbench.colorTheme": "Light Modern",

  // No Copilot completions while teaching.
  "github.copilot.enable": {
    "*": false
  },

  // Quarto: preview in the browser; visual editor wraps at 80 columns.
  "quarto.render.previewType": "external",
  "quarto.render.previewReveal": false,
  "quarto.visualEditor.markdownWrap": "column",
  "quarto.visualEditor.markdownWrapColumn": 80,
  "quarto.visualEditor.spelling": true,
  "quarto.visualEditor.spellingDictionary": "en_GB"
}

Download settings.json