Vim macros

Updated: 07 October 2025

  1. Type qn to record a macro into register n.
  2. Type q to stop recording the macro.
  3. Type @n to run the macro in register n.

The list of commands which make up the macro are stored in the n register. If the macro needs to be edited, paste it with "np. Then, after editing, select it and copy back into the register with "ny.

Use @@ to repeat the last macro.

Vim key mappings

Updated: 21 May 2023

Remove all text from line, remain in normal mode

nmap <Leader>S S<Esc>
nmap <Leader>cc cc<Esc>

Add blank line above or below current line

nmap <Leader>O O<Esc>j
nmap <Leader>o o<Esc>k

Scroll left and right without moving cursor

map <C-L> 5zl
map <C-H> 5zh

Vim motions

Updated: 15 May 2023

) Sentence forwards.

( Sentence backwards.

} Paragraph forwards.

{ Paragraph backwards.

S Delete contents of a line, go to start, stay in Insert mode.

C Delete to end of line and enter INSERT mode.

0 Start of line, stay in NORMAL mode.

$ End of line, stay in NORMAL mode.

#cc Change # lines.

ciw Change in word.

Neovim Treesitter

Updated: 18 September 2025

Install one or more treesitter parsers

:TSInstall <language_to_install>

Get a list of all available languages and their installation status

:TSInstallInfo

If required, install the tree sitter CLI

npm install -g tree-sitter
npm install -g tree-sitter-cli

Vim substitute

Updated: 16 March 2024

Capture groups

Given the following

one foo one
one bar one

this substitution :s/one\(.*\)one/two\1two/ yields

two foo two
two bar two

Replace text with a new line

Given the following

phpdoc_separation, blank_line_before_statement, ordered_imports
class_attributes_separation, phpdoc_summary, phpdoc_separation

this substitution :s/, /\r/g yields

phpdoc_separation
blank_line_before_statement
ordered_imports
class_attributes_separation
phpdoc_summary
phpdoc_separation

Case

Use I. The following will replace stays but not Stays

:%s/stays/country/gI

Vim surround

Updated: 17 May 2023

Surround a single character with square brackets, no additional space

ysl]

Surround a visual selection with backticks. Make the selection then

S`

For “Hello world!”, change double quotes to single quotes

cs"'

For <em>foo</em>, change tags to double quotes

cst"