VS Code vs Cursor en Mac: usa ambos con configuración sincronizada
Configuración práctica para ejecutar VS Code y Cursor en paralelo en macOS gestionando settings/extensiones/atajos desde una única fuente de verdad.
Tanto VS Code como Cursor están basados en VS Code OSS, por lo que settings.json es ~90% compatible y keybindings.json es 100% compatible. Sin intervención, cada uno acaba con su propia configuración dispersa. El patrón más limpio es VS Code como maestro, Cursor como espejo.
Esta guía está dirigida a macOS 14+ / VS Code 1.95+ / Cursor 0.45+. Es una configuración de 30 minutos después de la configuración inicial de Mac para ejecutar ambos IDEs limpiamente.
TL;DR
- VS Code = Settings Sync (cuenta de GitHub) para sincronización en la nube — maestro
- Cursor refleja
settings.json/keybindings.jsonde VS Code vía symlink o script de copia - Extensiones: pasa
code --install-extensionacursor --install-extension - Atajos de teclado: con
Cmd+K Cmd+Spuedes mantener el mismo mapa en ambos - Solo los atajos específicos de IA de Cursor se mantienen exclusivos de Cursor (p.ej.,
Cmd+Lchat,Cmd+Kedición en línea)
Requisitos previos
- macOS 14+, Homebrew instalado — configuración inicial de Mac
- Cuenta de GitHub (para Settings Sync de VS Code)
1. Instalar VS Code + Habilitar Settings Sync — 10 min
1.1 Instalar
brew install --cask visual-studio-codeRegistra el CLI code en PATH (abre VS Code, Cmd+Shift+P → «Shell Command: Install 'code' command in PATH»).
1.2 Activar Settings Sync — el paso crucial
Engranaje inferior izquierdo de VS Code → Backup and Sync Settings... → inicia sesión con GitHub.
Elementos a sincronizar (marca todo):
- ✅ Settings
- ✅ Keyboard Shortcuts
- ✅ Extensions
- ✅ User Snippets
- ✅ UI State
- ✅ Tasks
- ✅ Profiles
Después de esto, un Mac nuevo restaura el entorno completo en ~5 minutos — instala VS Code, inicia sesión con el mismo GitHub, listo.
1.3 Rutas de configuración en macOS
~/Library/Application Support/Code/User/
├── settings.json # configuración maestra
├── keybindings.json # atajos maestros
└── snippets/ # fragmentos de usuario
Cursor refleja estas rutas.
2. Instalar Cursor + Espejo del maestro — 10 min
2.1 Instalar
brew install --cask cursorRegistra el CLI cursor (abre Cursor, Cmd+Shift+P → «Shell Command: Install 'cursor' command in PATH»).
2.2 Rutas de configuración de Cursor
~/Library/Application Support/Cursor/User/
├── settings.json
├── keybindings.json
└── snippets/
Mismo formato JSON que VS Code, lo que hace la sincronización trivial.
2.3 Opción A — Symlink (más limpio)
Refleja la configuración de VS Code en Cursor. Las ediciones en cualquier lado se reflejan instantáneamente.
# Con Cursor cerrado
cd "$HOME/Library/Application Support/Cursor/User"
# Haz copia de seguridad de los archivos existentes
[ -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 a la configuración de VS Code
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⚠️ Advertencia: cuando Settings Sync reescribe el archivo de VS Code, el inodo puede cambiar y tu symlink se rompe. Vuelve a ejecutar
ln -s, o cambia a la Opción B.
2.4 Opción B — Script de copia (más estable)
En lugar de enlaces, ejecuta un comando de sincronización ocasionalmente.
# ~/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 sincronizado desde VS Code"Hazlo ejecutable + alias:
chmod +x ~/bin/sync-cursor-from-vscode.sh
echo 'alias sync-cursor=~/bin/sync-cursor-from-vscode.sh' >> ~/.zshrcEjecuta sync-cursor después de un cambio de configuración. (O prográmalo diariamente con launchd — fuera del alcance de esta guía.)
3. Sincronizar extensiones — 5 min
VS Code se sincroniza automáticamente vía Settings Sync. Cursor requiere un espejo inicial.
3.1 Exportar extensiones de VS Code
code --list-extensions > ~/code-extensions.txt3.2 Instalar en Cursor de una sola vez
cat ~/code-extensions.txt | xargs -n1 cursor --install-extension⚠️ Cursor usa Open VSX, no el marketplace de VS Code. Algunas extensiones propietarias de Microsoft (C/C++, Remote-SSH) necesitan una alternativa de Cursor. Los fallos están bien — omítelos.
3.3 Política para instalaciones futuras
- Extensiones agnósticas a IA → instalar en VS Code → Settings Sync automático + espejo ocasional de Cursor
- Relacionadas con IA (IA propia de Cursor) → solo Cursor, sin espejo a VS Code
- Análisis de código / refactorización / servidores de lenguaje → instalar en VS Code, espejo a Cursor
4. Atajos de teclado: estándar Mac, compartidos del IDE y exclusivos de Cursor
4.1 Atajos estándar de Mac (automáticos en ambos)
| Tecla | Acción |
|---|---|
Cmd+P | Apertura rápida de archivo |
Cmd+Shift+P | Paleta de comandos |
Cmd+B | Alternar barra lateral |
Cmd+J | Alternar panel (terminal) |
Cmd+T | Apertura rápida de símbolo |
Cmd+\ | Dividir editor |
Cmd+/ | Alternar comentario de línea |
4.2 Adiciones recomendadas — keybindings.json
// keybindings.json
[
// Nuevo terminal
{
"key": "cmd+shift+t",
"command": "workbench.action.terminal.new",
"when": "terminalProcessSupported"
},
// Enfoque barra lateral: explorador
{
"key": "cmd+1",
"command": "workbench.view.explorer"
},
// Enfoque barra lateral: búsqueda
{
"key": "cmd+2",
"command": "workbench.view.search"
},
// Enfoque barra lateral: git
{
"key": "cmd+3",
"command": "workbench.view.scm"
},
// Pestaña siguiente / anterior
{ "key": "cmd+alt+right", "command": "workbench.action.nextEditor" },
{ "key": "cmd+alt+left", "command": "workbench.action.previousEditor" }
]4.3 Teclas exclusivas de Cursor (déjalas como están)
| Tecla | Acción de Cursor |
|---|---|
Cmd+K | Edición IA en línea |
Cmd+L | Panel de chat IA |
Cmd+I | Chat de workspace (Composer) |
Tab | Aceptar completado IA |
Pueden chocar con los valores predeterminados de VS Code — mantenlos solo en Cursor y remapea las variantes de VS Code.
5. Claves recomendadas de settings.json — compartidas entre ambos
Cambios mínimos para máximo impacto:
// 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,
// Archivos
"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"
}Instala la fuente: brew install --cask font-jetbrains-mono.
6. Flujo de trabajo práctico: qué IDE para cada tarea
| Tarea | IDE | Por qué |
|---|---|---|
| Codificación diaria | VS Code | Ligero, estable sin IA |
| Programación en pareja con IA | Cursor | Composer + completado Tab |
Notebooks (.ipynb) | VS Code | Integración Jupyter más estable |
| Remote-SSH / Dev Containers | VS Code | Extensiones oficiales estables |
| Refactoring grande con LLM | Cursor | Ediciones multi-archivo de Composer |
| Escritura rápida / Markdown | Cualquiera | Cursor añade sinergia de revisión IA |
División de workspace recomendada:
- VS Code para
~/work: proyectos de empresa. - Cursor para
~/personal: proyectos personales y experimentos de IA.
Cada IDE reabre automáticamente la última carpeta, de modo que los contextos se separan de forma natural.
7. Solución de problemas
Conflictos de Settings Sync
Si dos máquinas envían al mismo tiempo, verás un aviso de conflicto. Elige Replace Local o Replace Remote.
Cursor sobreescribe settings.json
Al usar la Opción A, una actualización de Cursor puede romper el symlink. Vuelve a ejecutar ln -s. Si es frecuente, cambia a la Opción B.
CLI de cursor no encontrado
Abre Cursor → Cmd+Shift+P → «Shell Command: Install 'cursor' command in PATH» → nuevo terminal.
Algunas extensiones fallan al instalarse en Cursor
No están en Open VSX. Busca una alternativa (busca en Open VSX) o mantén esa característica solo en VS Code.
Próximos pasos
- Configuración inicial de Mac: Homebrew, SSH, gh
- Cadena de herramientas de desarrollo Mac (mise): gestión de versiones de Node/Python/Go
- Configuración de Claude Code: IA nativa de terminal
- Configuración avanzada de Cursor: reglas de Cursor, MCP, patrones de Composer
Referencias
- VS Code Settings Sync
- Open VSX Registry — marketplace de Cursor
- Docs de Cursor
Historial de cambios
- 2026-05-12 — Primera versión (expansión semilla devAlice M2)