具有敏感替换的vim不区分大小写的搜索

时间:2012-05-28 13:16:40

标签: vim

我有一个文件:

test
Test

目前,如果我想用'foo'替换'test'的所有情况,用'Foo'替换'Test',我必须使用两个命令:

:%s/test/foo/g
:%s/Test/Foo/g

有什么办法可以用一个命令来完成这个任务吗?

2 个答案:

答案 0 :(得分:14)

我认为蒂姆教皇的vim plugin将解决您的问题,安装它 %Subvert/{t}est/{f}oo/g%Subvert/test/foo/g(感谢评论)会做到这一点

答案 1 :(得分:0)

就像我的老婆说的那样,对于每个插件,都有一个vim单一代码也一样。试试

%s/\(test\|Test\)/\=submatch(0) =~ '\l.*' ? 'foo' : 'Foo'/g

说明:

%s/代替整个缓冲区

\(test\|Test\)/匹配“测试”或“测试”

\=使替换字符串使用以下表达式求值的任何

submatch(0)在这种情况下计算为整个匹配表达式

=~ '\l.*'进行正则表达式匹配的字符串比较(针对以小写字母开头的单词)

... ? 'foo' : 'Foo' if-then-else表达式,如果...为true,则计算结果为'foo',否则为'Foo'

/g在整行中执行

稍作修改,就足以满足我们的需求。参考文献:

:help :s
:help :sub-replace-\=
:help expression

......我只想对尝试进入vim评估和表达式的任何人发出一点警告...它们非常违反直觉(我来自C ++背景,也许如果您来自bash或python,这不是一个问题)。我发现以下vimscript指南/自学课程非常有帮助:http://learnvimscriptthehardway.stevelosh.com/