VS Code vs Cursor on Mac — Use Both with Synced Settings
Practical setup for running VS Code and Cursor side-by-side on macOS while managing settings/extensions/keymaps from a single source of truth.
VS Code and Cursor are both based on VS Code OSS, so settings.json is ~90% compatible and keybindings are 100% compatible. Left alone, though, each ends up with its own scattered config. The cleanest pattern is VS Code as master, Cursor as mirror.
This guide targets macOS 14+ / VS Code 1.95+ / Cursor 0.45+. It is a 30‑minute setup after Mac initial setup to run both IDEs cleanly.
TL;DR
- VS Code = Settings Sync (GitHub account) for cloud sync — master
- Cursor mirrors VS Code's
settings.json/keybindings.jsonvia symlink or copy script - Extensions: pipe
code --install-extensionintocursor --install-extension - Keybindings: with
Cmd+K Cmd+Syou can keep the same map on both - Only Cursor's AI-specific bindings stay Cursor-only (e.g.,
Cmd+Lchat,Cmd+Kinline edit)
Prerequisites
- macOS 14+, Homebrew installed — Mac initial setup
- GitHub account (for VS Code Settings Sync)
1. Install VS Code + Enable Settings Sync — 10 min
1.1 Install
brew install --cask visual-studio-codeRegister the code CLI in PATH (open VS Code, Cmd+Shift+P → "Shell Command: Install 'code' command in PATH").
1.2 Turn on Settings Sync — the crucial step
VS Code bottom-left gear → Backup and Sync Settings... → sign in with GitHub.
Sync items (check everything):
- ✅ Settings
- ✅ Keyboard Shortcuts
- ✅ Extensions
- ✅ User Snippets
- ✅ UI State
- ✅ Tasks
- ✅ Profiles
After this, a fresh Mac restores the full environment in ~5 minutes — install VS Code, sign in with the same GitHub, done.
1.3 macOS settings paths
~/Library/Application Support/Code/User/
├── settings.json # master settings
├── keybindings.json # master keybindings
└── snippets/ # user snippets
Cursor mirrors these paths.
2. Install Cursor + Mirror the Master — 10 min
2.1 Install
brew install --cask cursorRegister the cursor CLI (open Cursor, Cmd+Shift+P → "Shell Command: Install 'cursor' command in PATH").
2.2 Cursor's settings paths
~/Library/Application Support/Cursor/User/
├── settings.json
├── keybindings.json
└── snippets/
Same JSON format as VS Code, which makes sync trivial.
2.3 Option A — Symlink (cleanest)
Mirror VS Code's config into Cursor. Edits in either side reflect instantly.
# With Cursor quit
cd "$HOME/Library/Application Support/Cursor/User"
# Back up existing files
[ -f settings.json ] && mv settings.json settings.json.bak
[ -f keybindings.json ] && mv keybindings.json keybindings.json.bak
[ -d snippets ] && mv snippets snippets.bak
# Symlink to VS Code settings
ln -s "$HOME/Library/Application Support/Code/User/settings.json" settings.json
ln -s "$HOME/Library/Application Support/Code/User/keybindings.json" keybindings.json
ln -s "$HOME/Library/Application Support/Code/User/snippets" snippets⚠️ Caveat: When Settings Sync rewrites VS Code's file, the inode can change and your symlink breaks. Re-run
ln -s, or switch to Option B.
2.4 Option B — Copy script (more stable)
Instead of links, run a sync command occasionally.
# ~/bin/sync-cursor-from-vscode.sh
#!/usr/bin/env bash
set -euo pipefail
SRC="$HOME/Library/Application Support/Code/User"
DST="$HOME/Library/Application Support/Cursor/User"
mkdir -p "$DST"
cp "$SRC/settings.json" "$DST/settings.json"
cp "$SRC/keybindings.json" "$DST/keybindings.json"
rsync -a --delete "$SRC/snippets/" "$DST/snippets/"
echo "✓ Cursor synced from VS Code"Make executable + alias:
chmod +x ~/bin/sync-cursor-from-vscode.sh
echo 'alias sync-cursor=~/bin/sync-cursor-from-vscode.sh' >> ~/.zshrcRun sync-cursor after a settings change. (Or schedule daily with launchd — beyond this guide.)
3. Sync Extensions — 5 min
VS Code is automatic via Settings Sync. Cursor needs a one-time mirror.
3.1 Export VS Code extensions
code --list-extensions > ~/code-extensions.txt3.2 Install in Cursor in one shot
cat ~/code-extensions.txt | xargs -n1 cursor --install-extension⚠️ Cursor uses Open VSX, not VS Code's marketplace. Some MS-proprietary extensions (C/C++, Remote-SSH) need a Cursor fork or alternative. Failures are OK — skip them.
3.3 Policy for future installs
- AI-agnostic extensions → install in VS Code → Settings Sync auto + occasional Cursor mirror
- AI-related (Cursor's own AI) → Cursor only, no mirror to VS Code
- Code analysis / refactoring / language servers → install in VS Code, mirror to Cursor
4. Keybindings — Mac Standard + IDE Shared + Cursor-only
4.1 Mac standard shortcuts (automatic in both)
| Key | Action |
|---|---|
Cmd+P | Quick file open |
Cmd+Shift+P | Command Palette |
Cmd+B | Toggle sidebar |
Cmd+J | Toggle panel (terminal) |
Cmd+T | Quick symbol open |
Cmd+\ | Split editor |
Cmd+/ | Toggle line comment |
4.2 Recommended additions — keybindings.json
// keybindings.json
[
// New terminal
{
"key": "cmd+shift+t",
"command": "workbench.action.terminal.new",
"when": "terminalProcessSupported"
},
// Focus sidebar: explorer
{
"key": "cmd+1",
"command": "workbench.view.explorer"
},
// Focus sidebar: search
{
"key": "cmd+2",
"command": "workbench.view.search"
},
// Focus sidebar: git
{
"key": "cmd+3",
"command": "workbench.view.scm"
},
// Next / previous tab
{ "key": "cmd+alt+right", "command": "workbench.action.nextEditor" },
{ "key": "cmd+alt+left", "command": "workbench.action.previousEditor" }
]4.3 Cursor-only keys (leave alone)
| Key | Cursor action |
|---|---|
Cmd+K | Inline AI edit |
Cmd+L | AI chat panel |
Cmd+I | Workspace chat (Composer) |
Tab | Accept AI completion |
These may clash with VS Code defaults — keep them Cursor-only and remap VS Code's variants.
5. Recommended settings.json Keys — Shared Across Both
Minimum changes for maximum impact:
// settings.json
{
// Editor
"editor.fontFamily": "'JetBrains Mono', 'D2Coding', monospace",
"editor.fontSize": 14,
"editor.fontLigatures": true,
"editor.lineHeight": 1.6,
"editor.tabSize": 2,
"editor.detectIndentation": true,
"editor.formatOnSave": true,
"editor.codeActionsOnSave": {
"source.organizeImports": "explicit",
"source.fixAll.eslint": "explicit"
},
"editor.bracketPairColorization.enabled": true,
"editor.guides.bracketPairs": "active",
"editor.minimap.enabled": false,
// Files
"files.trimTrailingWhitespace": true,
"files.insertFinalNewline": true,
"files.eol": "\n",
"files.exclude": {
"**/.DS_Store": true,
"**/.git": false,
"**/node_modules": true
},
// Workbench
"workbench.editor.enablePreview": false,
"workbench.startupEditor": "none",
// Terminal
"terminal.integrated.fontFamily": "'JetBrains Mono', monospace",
"terminal.integrated.fontSize": 13,
"terminal.integrated.defaultProfile.osx": "zsh"
}Install the font: brew install --cask font-jetbrains-mono.
6. Practical Workflow — Which IDE for What
| Task | IDE | Why |
|---|---|---|
| Daily coding | VS Code | Lightweight, stable without AI |
| AI pair programming | Cursor | Composer + Tab completion |
Notebooks (.ipynb) | VS Code | Most stable Jupyter integration |
| Remote-SSH / Dev Containers | VS Code | Stable official extensions |
| Large LLM-driven refactor | Cursor | Composer multi-file edits |
| Quick writing / Markdown | Either | Cursor adds AI review synergy |
Workspace split recommended:
- VS Code for
~/work— company projects - Cursor for
~/personal— personal projects + AI experiments
Each IDE auto-reopens the last folder, so contexts stay separated naturally.
7. Troubleshooting
Settings Sync conflicts
If two machines push at the same time, you'll see a conflict prompt. Pick Replace Local or Replace Remote.
Cursor overwrites settings.json
While using Option A, a Cursor update may break the symlink. Re-run ln -s. If this is frequent, switch to Option B.
cursor CLI not found
Open Cursor → Cmd+Shift+P → "Shell Command: Install 'cursor' command in PATH" → new terminal.
Some extensions fail to install in Cursor
Not on Open VSX. Find an alternative (search Open VSX) or keep that feature in VS Code only.
Next Steps
- Mac initial setup — Homebrew, SSH, gh
- Mac dev toolchain (mise) — Node/Python/Go version management
- Claude Code setup — terminal-native AI pair
- Cursor setup deep dive — Cursor rules, MCP, Composer patterns
References
- VS Code Settings Sync
- Open VSX Registry — Cursor's marketplace
- Cursor Docs
Changelog
- 2026-05-12 — Initial draft (devAlice M2 seed expansion)