我有一个文件:
test
Test
目前,如果我想用'foo'替换'test'的所有情况,用'Foo'替换'Test',我必须使用两个命令:
:%s/test/foo/g
:%s/Test/Foo/g
有什么办法可以用一个命令来完成这个任务吗?
答案 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/