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

时间:2009-12-16 17:18:16

标签: regex vim intellij-idea

  

可能重复:
  Case preserving substitute in Vim

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

例如:

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

这样:

user->person
User->Person

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

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

这样:

myuser->thisperson
myUser->thisPerson
MyUser->ThisPerson

3 个答案:

答案 0 :(得分:7)

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

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

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

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

或者您可以使用实现此类功能的various scripts之一。

答案 1 :(得分:2)

在考虑之后重新给出答案; - )

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

当然可以改进,但这个想法仍然存在。

答案 2 :(得分:2)

有一个vim的插件:keepcase.vim