One-command migration from Cursor IDE to Visual Studio Code on macOS.
Switching back to VS Code shouldn't mean rebuilding your entire setup from scratch. This script moves everything over — settings, keybindings, snippets, and all your extensions — in under a minute.
bash <(curl -fsSL https://raw.githubusercontent.com/yahav10/cursor-to-vscode/main/cursor_to_vscode.sh)That's it. The script handles the rest and prints a full summary when it's done.
| Item | Details |
|---|---|
| ⚙️ Settings | Copies settings.json and automatically strips Cursor-specific keys |
| ⌨️ Keybindings | Copies keybindings.json — fully compatible between both editors |
| ✂️ Snippets | Copies all your custom code snippet files |
| 🧩 Extensions | Reads your Cursor extension list and installs each one into VS Code |
| 💾 Backups | Any existing VS Code files are backed up as .bak before overwriting |
Note: Cursor AI features (inline chat, Tab completion) are Cursor-specific and won't carry over. Consider GitHub Copilot or Continue.dev as alternatives.
╔══════════════════════════════════════════════════╗
║ Cursor → VS Code Migration • macOS ║
╚══════════════════════════════════════════════════╝
Checking prerequisites...
✔ Cursor config → ~/Library/Application Support/Cursor/User
✔ VS Code config → ~/Library/Application Support/Code/User
[1/4] Copying settings.json
→ Backed up existing settings → settings.json.bak
✔ settings.json copied (4 Cursor-specific key(s) stripped)
[2/4] Copying keybindings.json
✔ keybindings.json copied
[3/4] Copying code snippets
✔ 3 snippet file(s) copied
[4/4] Re-installing extensions into VS Code
→ Found 12 extension(s) in Cursor.
esbenp.prettier-vscode ✔ installed
dbaeumer.vscode-eslint ✔ installed
eamodio.gitlens ✔ installed
...
╔══════════════════════════════════════════════════╗
║ Summary ║
╚══════════════════════════════════════════════════╝
Config files
✔ Successes 3
Extensions
✔ Installed 12 / 12
Migration complete! Open VS Code and enjoy your familiar setup.
| Requirement | How to check |
|---|---|
| macOS | — |
| Cursor IDE | cursor --version |
| Visual Studio Code | code --version |
| Python 3 | python3 --version (pre-installed on modern Macs) |
| Both CLIs in PATH | See setup below ↓ |
Both editor CLIs must be registered in your terminal before running the script. This is a one-time step.
Register the Cursor CLI
- Open Cursor
- Press
Cmd+Shift+P - Search and run: Install 'cursor' command in PATH
Register the VS Code CLI
- Open VS Code
- Press
Cmd+Shift+P - Search and run: Install 'code' command in PATH
Verify both are working:
cursor --version && code --versionOption 1 — Run directly (recommended, no download needed)
bash <(curl -fsSL https://raw.githubusercontent.com/yahav10/cursor-to-vscode/main/cursor_to_vscode.sh)Option 2 — Clone and run
git clone https://github.com/yahav10/cursor-to-vscode.git
cd cursor-to-vscode
bash cursor_to_vscode.shOption 3 — Download and run
curl -O https://raw.githubusercontent.com/yahav10/cursor-to-vscode/main/cursor_to_vscode.sh
bash cursor_to_vscode.shThe script is safe to re-run. If the CLIs weren't set up the first time, fix that and run again — config files already migrated won't be duplicated.
cursor_to_vscode.sh
│
├── Pre-flight checks
│ ├── Locate Cursor config (~/.cursor/User or ~/Library/Application Support/Cursor/User)
│ └── Locate VS Code config (~/Library/Application Support/Code/User)
│
├── Step 1 — settings.json
│ ├── Backup existing VS Code settings → settings.json.bak
│ ├── Parse JSON with Python 3
│ ├── Strip keys prefixed with: cursor. aipopup. cursorprediction.
│ └── Write clean settings to VS Code
│
├── Step 2 — keybindings.json
│ ├── Backup existing keybindings → keybindings.json.bak
│ └── Copy file as-is (format is identical between editors)
│
├── Step 3 — snippets/
│ └── Copy all snippet files into VS Code snippets folder
│
├── Step 4 — Extensions
│ ├── cursor --list-extensions
│ ├── For each extension → code --install-extension <id>
│ └── Report installed / failed counts
│
└── Summary
├── Config file results (✔ success / ⚠ warning / ✘ failure)
└── Extension results (installed / total)
The script never deletes anything. Before overwriting any VS Code file, it creates a backup:
| Backup file | What it contains |
|---|---|
settings.json.bak |
Your original VS Code settings |
keybindings.json.bak |
Your original VS Code keybindings |
To restore a backup:
# Restore settings
cp ~/Library/Application\ Support/Code/User/settings.json.bak \
~/Library/Application\ Support/Code/User/settings.json
# Restore keybindings
cp ~/Library/Application\ Support/Code/User/keybindings.json.bak \
~/Library/Application\ Support/Code/User/keybindings.jsonMy settings.json has a JSON syntax error — what happens?
The script detects the parse failure, copies the file as-is, and warns you. VS Code will still load it. Open the file in VS Code (Cmd+Shift+P → "Open User Settings (JSON)") and it will highlight the error for you to fix.
The cursor CLI wasn't found — do I need to start over?
No. Just open Cursor, run Install 'cursor' command in PATH from the Command Palette, and re-run the script. It's safe to run multiple times.
Some extensions failed to install — what do I do?
The summary will show which ones failed. Open VS Code, go to the Extensions panel (Cmd+Shift+X), and search for them by name to install manually. Extensions sometimes fail if they're been deprecated or renamed on the marketplace.
Will this affect my Cursor setup?
No. The script only reads from Cursor and writes to VS Code. Your Cursor config is never modified.
Does this work on Linux or Windows?
Not yet — the current version is macOS-only. The config paths differ on other platforms. Contributions for Linux/Windows support are welcome!
What about VS Code Profiles?
Profiles aren't migrated automatically. You can export them manually from Cursor via File → Preferences → Profiles → Export Profile and import in VS Code via the same menu.
| Problem | Fix |
|---|---|
cursor: command not found |
Open Cursor → Cmd+Shift+P → Install 'cursor' command in PATH |
code: command not found |
Open VS Code → Cmd+Shift+P → Install 'code' command in PATH |
Cursor config not found |
Launch Cursor at least once so it creates its config directory |
VS Code config not found |
Launch VS Code at least once so it creates its config directory |
| Settings file not applied | Check for JSON syntax errors via VS Code's built-in JSON editor |
| Extensions not showing up | Restart VS Code after the script completes |
Contributions are welcome! If the script doesn't work for your setup, please open an issue with:
- Your macOS version:
sw_vers - Your Cursor version:
cursor --version - Your VS Code version:
code --version - The full terminal output of the script
Ideas for future improvements:
- Linux support
- Windows (WSL) support
- Migrate VS Code Profiles automatically
- Dry-run mode (
--dry-runflag) to preview changes without applying them - Selective migration flags (e.g.
--skip-extensions)
MIT — do whatever you want with it.
Made with ☕ for developers who just want their editor to feel like home.