vim不区分大小写搜索,带敏感替换

vim不区分大小写搜索,带敏感替换,vim,Vim,我有一个包含以下内容的文件: test Test 目前,如果我想用“foo”替换“test”的所有情况,用“foo”替换“test”,我必须使用两个命令: :%s/test/foo/g :%s/Test/Foo/g 有什么方法可以用一个命令来完成吗?我认为tim pope的这篇文章可以解决您的问题,安装它并 %subversit/{t}est/{f}oo/g或%subversit/test/foo/g(感谢您的评论)将实现我的granpappy所说的技巧,每个插件都有一个vim one li

我有一个包含以下内容的文件:

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

:%s/test/foo/g
:%s/Test/Foo/g
有什么方法可以用一个命令来完成吗?

我认为tim pope的这篇文章可以解决您的问题,安装它并
%subversit/{t}est/{f}oo/g
%subversit/test/foo/g
(感谢您的评论)将实现我的granpappy所说的技巧,每个插件都有一个vim one liner,它同样好。试一试

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

%s/
替换整个缓冲区

\(test\| test\)/
匹配“test”或“test”

\=
使替换字符串使用以下表达式的计算结果

submatch(0)
在此上下文中计算为整个匹配表达式

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

foo':'foo'
if-then-else表达式,如果。。。“Foo”是真的,反之亦然

/g
在整行执行此操作

只要稍加修改,就足以满足我们的需要。参考资料:

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

…我只想对任何试图进入vim计算和表达式的人提出一点警告。。。它们是非常反直觉的(我来自C++背景,也许你来自BASH或Python,这不是一个问题)。我发现下面的vimscript指南/自学课程非常有用:

我不确定这是否是您所需要的:
:%s/test/foo/g |%s/test/foo/g
是的,这很管用,但并没有真正帮助我,因为我正在尝试加快这个过程。哈哈。是的……:)这就是我通常所做的,但我并不觉得应该100%地提供它作为一个答案,因为作为Vim,可能还有一些其他的解决方案会非常简洁和棒。该插件可以工作,尽管你只需要键入%subversit/test/foo/gSorry进行所有奇怪的编辑。这嗯,非常有用的网站不允许我以我想要的方式发布,所以我正在与它的格式化机制作斗争。。。