devAlice
← Mac

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

  1. VS Code = Settings Sync (cuenta de GitHub) para sincronización en la nube — maestro
  2. Cursor refleja settings.json / keybindings.json de VS Code vía symlink o script de copia
  3. Extensiones: pasa code --install-extension a cursor --install-extension
  4. Atajos de teclado: con Cmd+K Cmd+S puedes mantener el mismo mapa en ambos
  5. Solo los atajos específicos de IA de Cursor se mantienen exclusivos de Cursor (p.ej., Cmd+L chat, Cmd+K edición en línea)

Requisitos previos


1. Instalar VS Code + Habilitar Settings Sync — 10 min

1.1 Instalar

brew install --cask visual-studio-code

Registra 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 cursor

Registra 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' >> ~/.zshrc

Ejecuta 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.txt

3.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)

TeclaAcción
Cmd+PApertura rápida de archivo
Cmd+Shift+PPaleta de comandos
Cmd+BAlternar barra lateral
Cmd+JAlternar panel (terminal)
Cmd+TApertura 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)

TeclaAcción de Cursor
Cmd+KEdición IA en línea
Cmd+LPanel de chat IA
Cmd+IChat de workspace (Composer)
TabAceptar 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

TareaIDEPor qué
Codificación diariaVS CodeLigero, estable sin IA
Programación en pareja con IACursorComposer + completado Tab
Notebooks (.ipynb)VS CodeIntegración Jupyter más estable
Remote-SSH / Dev ContainersVS CodeExtensiones oficiales estables
Refactoring grande con LLMCursorEdiciones multi-archivo de Composer
Escritura rápida / MarkdownCualquieraCursor 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

Referencias

Historial de cambios

  • 2026-05-12 — Primera versión (expansión semilla devAlice M2)