vim/neovim cheatsheet.

Modes

i           insert before cursor
a           insert after
o / O       new line below/above
v           visual (char)
V           visual (line)
ctrl-v      visual (block)
esc         normal mode
:           command mode
/           search forward
?           search backward

Save/quit

:w          write
:q          quit
:wq / :x    write+quit
:q!         quit without save
ZZ          save+quit
ZQ          quit without save

Motions (normal mode)

h j k l     left, down, up, right
w           next word
b           prev word
e           end of word
0 / ^       line start / first non-blank
$           end of line
gg / G      file start / end
H M L       top / middle / bottom of screen
ctrl-d/u    half page down/up
ctrl-f/b    full page
{} / ()     paragraph / sentence
% match     bracket

Edit

x           delete char
dd          delete line
dw          delete word
d$          delete to end
D           same as d$
diw         delete inner word
da{         delete around { }
ci"         change inner "
yy          yank line
y$          yank to end
p / P       paste after / before
u           undo
ctrl-r      redo
.           repeat last action

Search/replace

/pattern    search forward
?pattern    search backward
n / N       next / prev
*           search word under cursor

:s/old/new/         line, first
:s/old/new/g        line, all
:%s/old/new/g       whole file
:%s/old/new/gc      with confirm
:5,10s/old/new/g    lines 5-10

Buffers

:e file     open file
:bn / :bp   next / prev buffer
:b name     buffer by name (fuzzy)
:bd         delete buffer
:ls         list

Windows

:sp         horizontal split
:vsp        vertical
ctrl-w h/j/k/l   move
ctrl-w c    close
ctrl-w o    only this
ctrl-w =    equal sizes

Tabs

:tabnew
gt / gT     next / prev
:tabclose

Marks

ma          set mark a
'a          jump to mark a
``          last position

Macros

qa          start record into a
... actions
q           stop
@a          play
5@a         play 5 times

Registers

"ayy        yank into a
"ap         paste from a
"0p         last yank
"+p         system clipboard (vim with clipboard)
"*p         primary selection

Indent

>>          indent line
<<          unindent
=G          autoindent to end
gg=G        autoindent file

Numbers

ctrl-a      increment number under cursor
ctrl-x      decrement

Folding

zo          open
zc          close
zR          open all
zM          close all

Settings

:set number
:set relativenumber
:set list           " show whitespace
:set wrap / nowrap
:set hlsearch
:set ignorecase smartcase
:set expandtab tabstop=4 shiftwidth=4
:set autoindent smartindent
:set mouse=a

In ~/.vimrc or ~/.config/nvim/init.lua.

init.lua basics (neovim)

vim.opt.number = true
vim.opt.relativenumber = true
vim.opt.expandtab = true
vim.opt.tabstop = 4
vim.opt.shiftwidth = 4
vim.opt.ignorecase = true
vim.opt.smartcase = true
vim.opt.clipboard = "unnamedplus"
vim.opt.mouse = "a"

vim.g.mapleader = " "

vim.keymap.set("n", "<leader>w", "<cmd>w<cr>")
vim.keymap.set("n", "<leader>q", "<cmd>q<cr>")

Lazy.nvim plugin manager

require("lazy").setup({
  { "folke/tokyonight.nvim", lazy = false, priority = 1000 },
  { "nvim-telescope/telescope.nvim", dependencies = { "nvim-lua/plenary.nvim" } },
  { "nvim-treesitter/nvim-treesitter", build = ":TSUpdate" },
  { "neovim/nvim-lspconfig" },
  { "hrsh7th/nvim-cmp" },
})

LSP

require("lspconfig").lua_ls.setup({})
require("lspconfig").pyright.setup({})
require("lspconfig").tsserver.setup({})

vim.keymap.set("n", "gd", vim.lsp.buf.definition)
vim.keymap.set("n", "K", vim.lsp.buf.hover)
vim.keymap.set("n", "<leader>r", vim.lsp.buf.rename)
vim.keymap.set("n", "<leader>a", vim.lsp.buf.code_action)

Telescope

local t = require("telescope.builtin")
vim.keymap.set("n", "<leader>f", t.find_files)
vim.keymap.set("n", "<leader>g", t.live_grep)
vim.keymap.set("n", "<leader>b", t.buffers)

:help

:help
:help motions
:help :substitute
:helpgrep pattern

Common mistakes

  • Caps lock vs Esc — remap one to the other.
  • :wq when you wanted :q!.
  • Plugin sprawl. Start minimal.
  • Not learning text objects (ciw, di{).
  • Editing files in tmux scrollback (use Esc first).

Read this next

If you want my neovim config (LSP, Telescope, Treesitter), it’s at rajpoot.dev .


Building something AI-, backend-, or data-heavy and want a second pair of eyes? I do consulting and freelance work — see my projects and ways to reach me at rajpoot.dev .