Search and replace are fundamental for editing large files and maintaining consistency. Neovim uses standard regex patterns.
/pattern — search forward, ?pattern — search backward. Type pattern, press Enter to jump to first match.
n — next match in same direction, N — previous match (reverse direction). * — search for word under cursor forward, # — search backward.
Clear last search highlighting: :nohlsearch or :set hlsearch / :set nohlsearch to toggle.
/function " search for "function" n " next match N " previous match * " search word at cursor
:set ignorecase — makes search case-insensitive. :set smartcase — ignores case unless you use uppercase in pattern.
:set ignorecase /CONST " finds const, Const, CONST
Inline toggle: append \c to pattern for case-insensitive, \C for case-sensitive.
/Pattern\c " search case-insensitive
:s/old/new — substitute in current line, :s/old/new/g — all occurrences in line.
:%s/old/new — first occurrence per line in file, :%s/old/new/g — all occurrences in file.
:%s/old/new/gc — replace with confirm (shows each match, prompt y/n). :%s/old/new/i — case-insensitive.
:s/const/let/ " first per line :s/const/let/g " all in line :%s/old/new/g " all in file :%s/foo/bar/gc " confirm each
Patterns support regex. . matches any char, * is 0 or more, + is 1 or more, ? is 0 or 1.
^ — line start, $ — line end. \< — word boundary start, \> — word boundary end.
Groups: \(pattern\) captures, \1 refers to first group.
:%s/\<word\>/new/g " whole words only :%s/^/> /g " add "> " to line start :%s/\(.\)\(.\)/\2\1/g " swap adjacent chars
:10,20s/old/new/g — replace in lines 10–20. :.,+5s/old/new/ — replace in current and next 5 lines.
:'<,'>s/old/new/g — replace in visual selection (select text, type command).
Visual select, then : auto-fills :'<,'>. Type the substitute command.
v5j " select 5 lines :s/old/new/g " replace in selection
Quick workflow: search with /, view context, :set hlsearch highlights all, then :%s/old/new/gc to replace with confirmation.