VIM:如何保留搜索和替换的大小写

cas*_*son 10 regex vim intellij-idea

可能重复:
在Vim中保留替代案例

是否可以在vim中进行搜索和替换以保留搜索词的大小写?这是我想念的一个有用的功能.

例如,类似于:

:s/[uU]ser/[pP]erson/ (obviously, this doesn't work)
Run Code Online (Sandbox Code Playgroud)

这样:

user->person
User->Person
Run Code Online (Sandbox Code Playgroud)

保留多个字符的另一个示例:

:s/[mM]y[uU]ser/[tT]his[pP]erson/g
Run Code Online (Sandbox Code Playgroud)

这样:

myuser->thisperson
myUser->thisPerson
MyUser->ThisPerson
Run Code Online (Sandbox Code Playgroud)

jam*_*san 7

可以采取一些方法.如果你想坚持使用基本的Vim功能,你可以做类似的事情

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

如果您使用Perl绑定构建Vim,则可以使用:perldo.根据匹配/替换单词的长度以及您要保留的案例的位置,这可能有效,也可能无效.

:perldo s/(user)/"\L$1" ^ $1 ^ 'person'/ieg
Run Code Online (Sandbox Code Playgroud)

或者,您可以使用实现此类功能的各种 脚本之一.