My Cursor Setup Coming from Neovim

2025-04-11


Things I Missed Most

  • Speed
  • Minimal
  • Vim keybindings
  • Lazygit
  • Customization

Out of the box, Cursor / VS Code is a way worse UX for my preferences. However, after forcing myself to use Cursor for a few months, I have it in a place where I really enjoy working it.

Speed

Nothing we can do here. Moving on.

Lack of Clutter

Neovim encourages focusing on only one or two things at once and the keybindings are super intuitive to keep your space organized.

While Cursor isn’t as minimal, Zen mode gets pretty close. I do get stuck with 3 panels open at once if I’m not careful, but I made a custom hot key to close all panels.

Cursor IDE in Zen Mode

Vim Keybindings

There is Vim emulator extension for VS Code. It didn’t work out of the box like my Neovim setup, but its pretty configurable and now works great. I detail those settings in: Custom Vim Extension Settings.

Lazygit

Lazygit is a more annoying / slow experience in Cursor, but I was pleasently suprised at how well it works. I use this extension which basically opens in as a tab. I use it for checking out branches, stashing commits, resetting commits, and staging commits.

For everything else like viewing diffs, I use the built in source control panel. I prefer this because its really easy to edit using VS Code’s built in diff editor.

Customizing Cursor

LLMs know a lot about how to customize VS Code / cursor. If you have something that you want to change, you can probably figure it out really quick by using the chat panel to find you the right command or help you write a custom extension.

Settings / Keybindings to try

You can find the two below files by querying the command palette cmd+shift+p and searching settings or keybindings.

keybindings.json is where you can add your custom keybindings. settings.json is where you can add your custom settings.

Custom Vim Extension Settings

When I first switched to Cursor, I added the vim extension. It ended up being super frustrating because it just didn’t work out of the box like my Neovim setup. However, the vim extension holds the spirit of vim much more than I thought it would and is customizable.

Below, is my config. The main one I want to call out as essential is vim.useSystemClipboard which binds yank and paste to the system clipboard. This defaulting to false drove me absolutely insane until I found out it was a setting.

The keybindings will only work if you’re in a file, not when your focus in the ai chat window or the search panel. This creates some friction. Put the keybindings in your keybindings.json file if you want to use them from anywhere.

Note: Cursor Tab is my favorite Cursor feature. I used to bind switching files to tab which I miss, but its not worth trying to override tab in my opinion. I mostly just use cmd+p to search for files and switch between them now anyway.

In settings.json:

{
  // Use system clipboard for yank and paste
  "vim.useSystemClipboard": true,
  "vim.leader": "<space>",
  "vim.handleKeys": {
    "<C-d>": true // This conflicted with a vs code keybinding. This tells the vim extension to override it.
  },
  "vim.normalModeKeyBindings": [
    {
      // This shows the LSP hover info
      "before": ["K"],
      "commands": ["editor.action.showHover"]
    },
    {
      // This is super helpful for quick refactoring.
      "before": ["<leader>", "r", "a"],
      "commands": ["editor.action.rename"]
    },
    // Apps
    {
      "before": ["<leader>", "l", "g"],
      "commands": ["lazygit-vscode.toggle"]
    },
  ]
}

Custom Settings

In settings.json:

{
  "zenMode.restore": true, // This will open Cursor in zen mode if you closed while in zen mode
  "zenMode.centerLayout": true, // Personal preference
  "zenMode.hideLineNumbers": false, // I like to see line numbers
  "zenMode.fullScreen": false, // I use rectangle and don't want to be fullscreen which zen mode does by default
  "editor.defaultFormatter": "esbenp.prettier-vscode", // Set this to whatever you use most
  "editor.formatOnSave": true,
  "lazygit-vscode.toggle": true, // More on the lazygit extension below
  "editor.wordWrap": "on",
  "editor.wordWrapColumn": 120, 
}

Custom Cursor Keybindings

In keybindings.json:

[
  // Window and Tab Management - Sometimes won't be in vim emulator so its in these settings
  {
    "key": "ctrl+w+v",
    "command": "workbench.action.splitEditor"
  },
  {
    "key": "ctrl+h",
    // Change focus between split windows
    "command": "workbench.action.focusPreviousGroup"
  },
  {
    "key": "ctrl+l",
    "command": "workbench.action.focusNextGroup"
  },
  // Panel Management - These are non-editor panes like the file tree + ai chat.
  {
    "key": "cmd+shift+e",
    // By default, cmd+shift+e only opens the panel and doesn't close :\
    "command": "workbench.action.toggleSidebarVisibility",
    "when": "explorerViewletVisible"
  },
  {
    "command": "runCommands",
    "key": "cmd+shift+h",
    "args": {
      // Hide all the panels - VS Code gets cluttered really easily.
      "commands": [
        "aichat.close-sidebar",
        "workbench.action.closeSidebar",
        "workbench.action.closePanel"
      ]
    }
  },
  // Cursor
  {
    "key": "cmd+i",
    "command": "composerMode.agent"
  },
  {
    "key": "cmd+l",
    "command": "composerMode.chat"
  }
  // Other
  {
    "key": "cmd+shift+g",
    // I actually really like the VS Code git integration for editing my changes before pushing big commits.
    "command": "workbench.view.scm"
  },
  // Dummy command for testing new actions out since the VS  Code / Cursor has intellisense  in this file which is helpful for when adding vim keybindings.
  {
    "key": "cmd+shift+j",
    "command": "editor."
  }
]

Most Used Hot Keys

  • cmd+p - Search files
  • cmd+shift+f and cmd+f - Global and local search
  • cmd+shift+p - Open command palette. I run commands like restarting the ts server pretty frequently.
  • shift+K - Show lsp info instead of having to hover over it
  • <leader>ra - Rename symbols
  • cmd+j - Open the integrated terminal
  • cmd+i - Open the AI panel in Agent mode
  • cmd+l - Open the AI panel in Chat Mode
  • cmd+n (In AI Panel) - Start new chat. I prefer shorter chats with a fresh start.
  • cmd+shift+d - Open the debugger panel
  • cmd+w and cmd+shift+t - Close tab and reopen last closed tab
  • ctr+o/i (vim) or ctl+-/shift+- - Go backwards / forwards from last cursor position
  • gd (vim) - Go to definition