我正在尝试执行以下
%s/foo/\=substitute(getline('.'),'bar','','g')
到这个例子
this is a foo cool bar
我希望它返回的是
this is a bar cool bar
但它正在返回
this is a this is a foo cool cool bar
意味着返回的整行不仅仅是substitute()函数中匹配的正则表达式
我错过了什么吗?我知道split()函数和sed实现,但我希望它在substitute()
中答案 0 :(得分:1)
为什么substitute()
?
为什么不简单地:s/foo/bar/
?
无论如何,两个丑陋的命令都应该有效...... :(
:%s/foo/\=substitute(submatch(0),".*","bar","g")/
:%s/.*/\=substitute(submatch(0),"foo","bar","g")/
如果您只想使用功能,这也适用:
:%call setline(line('.'),substitute(getline('.'),'foo','bar','g'))