vim search and replace using current line as reference point

Vim

Vim Problem Overview


Is there a way to specify search and replace range using the current line as a reference? I can specify range using explicit line numbers like

:5,15s/foo/bar/g

to do the search and replace on only lines 5 to 15. How to specify a range like "from the current line to 10 lines below (or above) the current line"?

Vim Solutions


Solution 1 - Vim

You can use . for the current position, and .+10 for 10 lines down:

:.,.+10s/foo/bar/g

Some other useful ranges:

  • % for the whole file. Example: :%s/foo/bar/g.
  • '<,'> for the lines of visually selected block. This might get you more than you want of the visual selection starts or ends in the middle of a line. The whole line is included.
  • 'a,'b from mark a to mark b.
  • .,$ from the current line to the end of the file.

Solution 2 - Vim

:help :range gives you all the details; you can do quite sophisticated things, e.g. :'a;/pat1/-1.

For ranges starting from the current line, a neat trick is to start command-line mode by prefixing the : with a count: E.g. 5: turns into :.,.+4.

Protip: Learn how to look up commands and navigate the built-in :help; it is comprehensive and offers many tips. You won't learn Vim as fast as other editors, but if you commit to continuous learning, it'll prove a very powerful and efficient editor.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionEricCView Question on Stackoverflow
Solution 1 - VimCodie CodeMonkeyView Answer on Stackoverflow
Solution 2 - VimIngo KarkatView Answer on Stackoverflow