2012-09-19 28 views
2

我失去了一些微妙的和愚蠢的这一点。我有一个简短的vim脚本。在这里面,我试图做的事:替代Vimscript中失败

s/.*_____.*/\=repeat('=', 78)/ 

(这是确切的代码。)

当我在正常模式下做/\v.*____.*,我能顺利找到模式(不止一次)。当我在正常模式下执行这个替换时,它会成功。

我敢肯定,我失去了一些东西,只要某处逸出字符。请赐教!

+4

您是否知道您的替代仅覆盖了当前行;你需要使用'%s ...'将其应用到整个缓冲区(或者将你的函数单独应用到所有行)。 –

+0

OMG ...我是个白痴。不,完全错过了我以某种方式放弃了%。你想回答这个问题,我可以接受吗? – Mike

+0

不客气,可能会发生。很高兴我能帮上忙。在此背景下,我添加了一些更多背景信息的答案。 –

回答

1

s/命令仅覆盖当前行;这不是你通常想要的。

的最简单的方法是使用%s/...处理整个缓冲器。但是,您的映射/命令可能需要支持任意范围。为此,:call通常会为每行调用一次用户定义的函数,除非您定义了它自己处理范围的函数。详细信息请参见:help function-range-example