- Published on
How to do search and replace on nvim
Table of contents
Single file case
:s
is the command to do search and replace on nvim. The basic syntax is :s/old/new/g
where old
is the string to be replaced and new
is the string to replace with. The g
at the end is to replace all occurrences of old
with new
. If g
is not used, only the first occurrence of old
will be replaced with new
at each line.
You can also specify the range of lines to do the search and replace. Using %s/old/new/g
will replace all occurrences of old
with new
in the entire file.
You can also specify a range of lines to do the search and replace by visual selection. First enter visual mode by pressing v
and then select the lines you want to do the search and replace on. Then type :s/old/new/g
and press enter.
You can use regex for your matches, and may also specify case insensitivity by prepending \C
(case sensitive) or \c
(case insensitive) to the search term, depending on your default setting.
Using case sensitivity
If you find that you need to jump around your command, you can press ctrl+f
to open the command in a buffer. This allows you to enter normal mode and also check your previous commands.
Multi file case
You can do multi-file search and replace by using the popular spectre
plugin for nvim. But if you already of a fuzzy file finder such as fzf-lua
or telescope.nvim
, you can achieve the same without needing an extra plugin. In fact, this also allows you to select which files to perform the mass search-and-replace on with more ease. I use fzf-lua, so I will cover this case. But telescope will be very similar.
- First enter the
live_grep
mode by pressing your binding or typing in:lua require("fzf-lua").live_grep()
. - Type in your search term.
- Select the files you want to do the search and replace on by pressing
tab
on each file. - Press enter to open the selected files in the quickfix window.
- Type
:cdo
and then the same syntax as the single file case (e.g.%s/old/new/g
). If you want to save the changes, type
:wa
(write all open buffer) or:cdo w
(write all in quickfix) to write all the files.
- If you want to revert the changes, you can also type
:cdo u
to undo the changes.