在vim中,如何使用多个选项替换模式,具体取决于原始字符串的一部分?

时间:2016-07-12 21:20:54

标签: vim substitution

我想替换:

getLeftChild
getRightChild

leftchild
rightchild

我知道如何在两次传递中执行此操作::s/getLeftChild/leftchild/g:s/getRightChild/rightchild/g。但有什么像:s/get\(.*\)Child/<if \1 == "Left" then replace it with "left", else "right">child/g

2 个答案:

答案 0 :(得分:3)

如果您想一次性进行替换,可以使用内置的tolower()函数:

%s/\vget(.*Child)/\=tolower(submatch(1))/

您可以调整真实文件的搜索模式。

或者您可以使用\L进行小写替换。 (由@Meninx评论)。

%s/\vget(.*Child)/\L\1/

也许您想检查\L and \l\U and \u

之间的区别

答案 1 :(得分:2)

之前我有类似的需求。我可能

:1,2s/get//(好吧,这会把它变成

1 LeftChild
2 RightChild

但我更有可能做<C-v><count>j$ugvV:s/^get//(其中<count>表示类似1或10的内容)(尽管如果它是这样的段落,我更有可能使用{ {1}}或者v}可以选择paragaph。