0

我正在尝试执行以下操作

%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

意味着整行被返回,而不仅仅是替换()函数中匹配的正则表达式

我错过了什么吗?

我知道 split() 函数和 sed 实现,但我想要它在替代()

4

1 回答 1

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'))
于 2013-02-15T17:43:53.383 回答