Easy find and replace is one of those quality of life improvements that make Vim great. With one quick command, and a little regex, you can replace a pattern across an entire file. Here’s how:
Find and replace in the entire file with Vim:%s
This is my most-used version of Vim find and replace. :%s
will find and replace a pattern across the entire file being edited. The command is formatted like this:
:%s/match/replacement/
.
It’ll take anything in your file which matches the match
pattern, and replace it with replacement
.
For example, here’s a screenshot of some identifying strings I need to reformat:
With %s
, we can remove all of those prefixes with one quick command:
This is the exact command I used: :%s/\w.+_//g
. Let’s break it down:
:%s
– this is the Vim command for find and replace on all lines./\w.+_/
– this is the matcher expression. It says “find a word character, followed by any number of anything else followed by an underscore “_”. Not very specific, but good enough for this job.//
– between these two slashes is what to replace with. In this case it’s empty because I want to delete.g
– Global flag. This makes sure the replacement affects multiple occurrences on the same line. By default, this command only changes the first instance on each line.
Important note: Pure Vim tends to interpret regex characters literally, so you may have to escape regex quantifiers. Meaning: instead of using +
in your pattern you might need \+
. So the full pattern above would become /\w.\+_/
.
I ran this pattern (/\w.+_/
) in pure Vim and again in VS Code with Vim emulation—pure Vim did require additional escaping, VS Code did not.
Find and replace with Vim :s
This works just like the :%s
command, but :s
will only replace on your current line.
That’s about it for the basics. For a lot more detail, like how to search specific line ranges, check out this detailed post.
Helpful Links
- This Stackoverflow answer which taught me about Vim’s
magic
setting, responsible for how it interprets Regex patterns