Skip to content
~/rajwat

May 2027

Résumé
own config since 06.2026 · 23 plugins · leader is space2 min read

Vim / Neovim

Learning to write code without reaching for the mouse.

The whole point is not touching the mouse. Every time a hand leaves the home row for the trackpad the thought I was holding gets put down and picked back up a second later, and once you notice that tax you cannot stop noticing it. Neovim is me refusing to keep paying it. Files, search, git, diagnostics, a terminal: all of it is reachable from where my fingers already are. It looks good, it is genuinely faster, and it feels like programming instead of pointing at things.

Two people talked me into it. Professor Kim, watching him teach out of a terminal instead of an IDE, and ThePrimeagen, who is where I picked up the argument that editor speed is really about staying inside your own head. Harpoon is literally his plugin. You pin the four files you are actually working in and jump between them with <leader>1 through <leader>4, and it is the one I would reinstall first on a new machine.

It is my own config, not a distro. init.lua loads options, keymaps and autocmds, then hands off to lazy.nvim, and every plugin spec is a file I wrote and can explain. Rosé Pine Moon with a transparent background so Ghostty shows through, relative line numbers, centered scrolling, Telescope with the native fzf sorter for files and project grep, mason for LSP servers, conform for formatting on demand rather than on every save, lazygit on <leader>gg, and which-key so the bindings I have not memorised yet are one pause away. Twenty-three plugins, all pinned, plus one commit in the history that just says "removed packages i wont use".

The rule I hold myself to: no plugin goes in until I have personally felt the problem it solves. Config that accumulates faster than understanding is just someone else's editor with my name on the directory. The honest asterisk is that mouse = "a" is still sitting in my options file. I do not use it. I also have not deleted it, which is a fair summary of how far along the conversion actually is.

the keys, moving

SPC

Press space and pause. which-key opens the menu of everything that starts with it.

every binding

91 of 91

General

  • <Esc>Clear search highlight
  • <C-d>/<C-u>Half page down / up, re-centered
  • n/NNext / previous search hit, re-centered
  • JJoin line below, cursor stays put
  • J/KMove the selected lines down / up (visual)
  • </>Indent left / right, keep the selection
  • <leader>w/<C-s>Save file, in any mode
  • <leader>qQuit window
  • <leader>fnNew file, creating folders as needed
  • <leader>fNNew folder
  • <leader>pPaste over a selection, keep the yank (visual)
  • <leader>dDelete without yanking
  • <leader>srReplace the word under the cursor in the file
  • <leader>mpMarkdown preview in a glow float
  • <leader>LOpen lazy.nvim
  • <leader>?Keymaps for this buffer

Buffers and windows

  • <Tab>/<S-Tab>Next / previous buffer
  • <S-q>/<leader>bdClose buffer
  • <leader>bDClose buffer, discarding changes
  • <C-h/j/k/l>Move to the window left / down / up / right
  • <leader>sv/<leader>shSplit vertical / horizontal
  • <leader>seEqualize split sizes
  • <leader>sxClose the split, keep the buffer open
  • <C-Up>/<C-Down>Grow / shrink height
  • <C-Left>/<C-Right>Shrink / grow width
  • ]q/[qNext / previous quickfix item
  • <leader>xqOpen the quickfix list

Find, Telescope

  • <leader><space>/<leader>ffFind files
  • <leader>fg/<leader>/Live grep the project
  • <leader>fwGrep the word under the cursor
  • <leader>fbOpen buffers
  • <leader>frRecent files
  • <leader>fdDiagnostics, project wide
  • <leader>fhHelp tags
  • <leader>fkKeymaps
  • <leader>fcColorschemes
  • <C-j>/<C-k>Next / previous result, in the picker
  • <Esc>Close the picker

Marks, Harpoon

  • <leader>aAdd the current file to the list
  • <leader>HToggle the quick menu
  • <leader>fHBrowse marks in Telescope, with preview
  • <leader>1…<leader>4Jump to mark 1 to 4
  • <C-n>/<C-p>Cycle to the next / previous mark

Marks are per project, so every repo keeps its own set. The quick menu is an editable buffer: reorder lines to reorder marks, delete a line to drop one.

Code, LSP

  • gdGo to definition
  • gDGo to declaration
  • grReferences
  • gIGo to implementation
  • gyGo to type definition
  • KHover documentation
  • <leader>crRename symbol
  • <leader>caCode action
  • <leader>csDocument symbols
  • <leader>cfFormat the buffer, or a visual range
  • <leader>cdLine diagnostics in a float
  • ]d/[dNext / previous diagnostic

Formatting is manual, via conform.nvim: stylua for Lua, ruff for Python, gofumpt and goimports for Go, prettierd for web files, and the LSP formatter otherwise.

Text objects

  • af/ifA function / inner function
  • ac/icA class / inner class
  • aa/iaA parameter / inner parameter
  • ]f/[fNext / previous function start
  • ]FFunction end
  • ]c/[cNext / previous class
  • za/zR/zMToggle fold, open all, close all

Usable after any operator, so vif, daf, cic and via all work.

Surround

  • ysiw(Surround the word with ()
  • ys2(/ys3(Surround two / three words
  • ysl(Surround the whole line
  • cs"'Change the surrounding " to '
  • ds(Delete the surrounding ()
  • S)Surround the selection (visual)

Any pair works in place of the bracket, so ys2" and ysl{ do what you would expect. Opening brackets add no padding spaces.

Git

  • <leader>gaStage everything, git add -A
  • <leader>gcCommit, prompting for the message
  • <leader>gp/<leader>glPush / pull
  • <leader>gfFetch all, with prune
  • ]h/[hNext / previous hunk
  • <leader>hs/<leader>hrStage / reset the hunk
  • <leader>hS/<leader>hRStage / reset the whole buffer
  • <leader>hpPreview the hunk
  • <leader>hdDiff this file
  • <leader>hb/<leader>gbBlame the line / toggle inline blame
  • <leader>gglazygit, in a floating window

The quick commands run git directly and report back as a notification. Browsing goes through Telescope: <leader>gs status, <leader>gL log, <leader>gB branches.

Terminal and tree

  • <leader>tv/<leader>thTerminal in a vertical / horizontal split
  • <leader>tnTerminal in the current window
  • <S-z>Leave terminal insert mode
  • <leader>eToggle the file tree
  • <leader>feReveal the current file in the tree
  • a/d/rCreate / delete / rename, inside the tree
  • x/c/pCut / copy / paste, inside the tree

Terminal buffers open with no line numbers and no sign column, already in insert mode.

Completion, blink.cmp

  • <C-space>Open completion, or show docs
  • <C-n>/<C-p>Next / previous item
  • <Tab>/<S-Tab>Next / previous item, or jump placeholders
  • <CR>/<C-y>Accept the selected item
  • <C-e>Dismiss