开发者

VIM: How to preserve case for search and replace [duplicate]

This question already has answers here: Closed 11 years ago.

Possible Duplicate:

Case preserving substitute in Vim

Is it possible to do a search and replace in vim that preserves the case of the search term? This was a useful feature in intelliJ that I miss.

For instance, something like:

:s/[uU]ser/[pP]erson/ (obviously, this doesn't work)

Such that:

user->person
User->Person

Another example with multiple characters to preserve:

:s/[mM]y[uU]ser/[tT]his[pP]erson/g

Such that:

myuser->thisperson
myUser->thisPerson
MyUser->ThisPe开发者_如何学Gorson


There are a few approaches that can be taken. If you want to stick with basic Vim functionality, you can do something like

:%s/[uU]ser/\=submatch(0) ==# 'user' ? 'person' : 'Person'/g

If you have Vim built with Perl bindings, you can make use of :perldo. Depending on the length of the matching/replacing words and where the case you want to preserve is, this may or may not work.

:perldo s/(user)/"\L$1" ^ $1 ^ 'person'/ieg

Or you can make use of one of the various scripts that implement such functionality.


There's a plugin for vim: keepcase.vim


Redone the answer after giving it some thought ;-)

:s@\([Uu]\)ser@\=((submatch(1)=="U")?"P":"p")."erson"@gc

Of course it can be improved, but the idea stays.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜