Profiles and Settings Sync
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:
- VS Code’s built-in defaults,
- the active profile’s settings (Default or
RorR-Lecturer, never a mix), - the workspace settings (
.vscode/settings.jsonin 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"
}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 thehttpgdR package), with the samesettingsSync.ignoredSettingsline asR; - 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"
}