15

In vim, I know I can search with or without case sensitivity. But if I want to search for a string in either upper or lower case, and replace it with a replacement of the same case, is that possible in a single :s///?

For example, I want to change these lines:

short
Short
SHORT

to

long
Long
LONG

I can do this in three :s commands, or one insensitive :s and go fix the cases manually, but is there a better way? A case-preserving search and replace?

Kevin
  • 40,087
  • 16
  • 88
  • 112

2 Answers2

7

You can try this plugin.

https://github.com/tpope/vim-abolish

This plugin can help you to match not just the case sensitive text, also its variants too. Like /good{,ies} will match both good as well as goodies.

Similarly, it can replace with case sensitive as well as variant included.

      :%S/long/short/g

will replace long with short, Long with Short, LONG with SHORT.

SibiCoder
  • 183
  • 1
  • 6
3

There isn't a native feature of :s that does this as far as I know, but if you're willing to install add-ons, you could look at Michael Geddes' keepcase plugin.

jw013
  • 50,274
  • 9
  • 137
  • 141