vim替换函数用s /

时间:2013-02-15 17:27:43

标签: vim

我正在尝试执行以下

%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()

1 个答案:

答案 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'))