Search & Replace
Vim Text Editor Quick Reference
3 min read
Published Jul 6 2025
Guide Sections
Guide Comments
Searching for text
Key | Description |
---|---|
/text | Search forwards for whatever text is specified, case sensitive, eg. /fish will find the text fish |
/text\c | Search forwards for whatever text is specified, case insensitive, eg. /fish\c will find the text fish or Fish or FISH etc. |
?text | Search backwards for whatever text is specified, case sensitive, eg. ?fish will find the text fish |
?text\c | Search backwards for whatever text is specified, case insensitive, eg. ?fish\c will find the text fish or Fish or FISH etc. |
/regex | Search forwards with a regex pattern, eg. /\d\{3} will search for a 3 digit number forwards |
?regex | Search backwards with a regex pattern, eg. ?\d\{3} will search for a 3 digit number backwards |
n | Next matching pattern |
N | Previous matching pattern |
* | Search for the current word forwards |
# | Search for the current word backwards |
Substitute
Substitute can be used to replace text in lines, syntax is :[range]s/pattern/replacement/[flags]
[range]
- this is optional, list of options defined below.pattern
- this can be text or a regex pattern.replacement
- this is the text you want to add replace with.[flags]
- this is optional and determines how it will act, list of options defined below.
Examples:
This will replace the first occurrence of car
it finds in the file with the word bike
.
This will replace all occurrences of car
with the word bike
in the entire file. (%
= all lines, g
= global per line).
Ranges
Basic range elements:
Range | Meaning |
| Curren line |
| Last line in the file |
| Line 1 |
| Line 5 |
| Line marked with mark |
| Next line matching |
| Previous line matching |
|
|
|
|
These can be combined to make ranges using commas ,
or semi colons ;
:
Syntax | Meaning |
| Lines 1 through 5 |
| From current line to end of the file |
| From match of |
| From mark |
| Shortcut for the entire file ( |
| Current line and the next 3 lines |
| All lines between (and including) those that match those patterns |
| Line 5 and the next 2 lines (so lines 5–7) |
The difference between using ,
or ;
:
,
- Both line numbers are evaluated relative to line 1.;
- The second number is evaluated relative to the first.
Flags
Key | Description |
---|---|
g | Replace all occurances |
i | Ignore case |
I | Don't ignore case |
c | Confirm each substitution |
Global
Global allows you to select which lines you want to run a command on. So you can combine it with replace to only replace text in a selection of lines, or combine it with delete to only delete within certain lines etc.
The syntax is :[range]g/pattern/command
[range]
- is an optional range.pattern
- is what pattern you want to match when selecting where you want to run a command.command
- is the command you would like to run.
Examples:
On all lines containing dog
, run the substitution s/cat/duck/
.
Delete all lines starting with #
.
Delete all blank lines.
Inverse global
Inverse global uses :v
and is the opposite of the global option, so will run a command on any lines that don't match the selection.
The syntax and options are the same as global but using v
instead of g
.
Examples:
Delete all lines NOT starting with #
.
Replace cat
with duck
only on lines that don’t contain dog
.