Here’s what Vim’s documentation has to say about the gn command (:help gn):
Search forward for the last used search pattern, like with
n, and start Visual mode to select the match. If the cursor is on the match, visually selects it. If an operator is pending, operates on the match.
You know how pressing n tells Vim to jump to the start of the next match?
Well, gn tells Vim to start visual mode and select the next match.
When used in this fashion, the gn command makes Vim’s search behave like most graphical text editors, where the search command selects the current match.
As you might expect, the gN command lets you visually select the previous match.
I find the gn command especially useful in Operator-pending mode. For example, dgn will delete the next match, cgn will do the same then switch to Insert mode, gUgn will convert the next match to uppercase characters.
Look up :h operator for more ideas.
Using gn with the dot command
Suppose that we have a document containing several occurrences of the word ‘Normal’ and we’d like to change each occurrence to ‘Visual’.
We can run /Normal to search for the word ‘Normal’, then type cgnVisual<Esc> to change the next match to the word ‘Visual’.
You’re probably familiar with the technique of pressing n. to repeat the change for each subsequent match. In Practical Vim, I call this pattern of usage The Dot Formula.
It lets us use two keystrokes per change.
In this context, we can do better.
The dot command repeats the last change, which is equivalent to typing cgnVisual<Esc>.
We could translate that into plain English as: “change the next match”.
We don’t have to press n. because . does the job by itself.
That makes it just one keystroke per change!
You need Vim 7.4.110 to use gn
You can use the gn command if you are running Vim 7.4 at patch level 110 or greater.
The gn feature was first introduced by Christian Brabandt in Vim 7.3 with patch 610, then the functionality was refined with patches 625, 636, 645, 647, and 1275. The feature was made widely available in Vim 7.4, but if you are running a version less than patch level 110 then the gUgn command demonstrated in this video won’t work.
Practical Vim - tip 84
In the 1st edition of Practical Vim, tip 84 goes over a different approach for making this same kind of change, which is nowhere near as tidy! When I wrote this edition, the gn feature hadn’t yet been added to Vim. I’ll have to revise this tip when the time comes to write a new edition of Practical Vim.
If you’re stuck on an older version of Vim, note that you can get similar functionality by installing the textobj-lastpat plugin by Kana Natsuno.
I used to consider this to be an essential plugin, but don’t now that the gn command is built-in to Vim.
Further reading
:help gn:help operator:help .- Practical Vim, tip 84: Operate on a complete search match