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

a0x5cqrl  于 2023-06-23  发布在  其他
关注(0)|答案(2)|浏览(142)

我有一个文件里面有这个

test
Test

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

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

有没有什么方法可以用一个命令完成这个任务?

vyswwuz2

vyswwuz21#

我认为tim pope的这个vim plugin可以解决你的问题,安装它,%Subvert/{t}est/{f}oo/g%Subvert/test/foo/g(感谢评论)就可以了。

hfsqlsce

hfsqlsce2#

就像我爷爷常说的,每个插件都有一个同样好的vim一行程序。试试看

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

说明:
%s/替换整个缓冲区
\(test\|Test\)/匹配“test”或“Test”
\=使替换字符串使用以下表达式的计算结果
submatch(0)在此上下文中计算为整个匹配的表达式
=~ '\l.*'正则表达式匹配的字符串比较(针对以小写字母开头的单词)
... ? 'foo' : 'Foo' if-then-else表达式,其计算结果为'foo' if...为真,否则为“Foo”
/g在整行上执行此操作
只要稍加修改,就足以满足我们的需要。参考文献:

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

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

相关问题