代码之家  ›  专栏  ›  技术社区  ›  case nelson

VIM:如何保留搜索和替换的案例[重复]

  •  10
  • case nelson  · 技术社区  · 15 年前

    可能重复:
    Case preserving substitute in Vim

    是否可以在VIM中进行搜索和替换以保留搜索词的情况?这是一个有用的功能,在Intellij,我怀念。

    例如,类似于:

    :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 回复  |  直到 14 年前
        1
  •  7
  •   jamessan    15 年前

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

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

    如果您使用Perl绑定构建了VIM,那么可以使用 :perldo . 根据匹配/替换词的长度以及要保留的大小写,这可能有效,也可能无效。

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

    或者你可以利用 various scripts 实现这种功能。

        2
  •  2
  •   tangens    15 年前

    Vim有一个插件: keepcase.vim

        3
  •  2
  •   Michael Krelin - hacker    15 年前

    思考之后再做一次回答;—)

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

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