2013-07-04 51 views
2

我正试图编写一个运行搜索和替换范围的函数。如何在vim函数中进行搜索和替换?

我知道一个人可以做:2,5 s/some pattern/something else/做这个vim命令,但我不知道这是如何工作在一个函数定义。最初,我试过

function! MyFunc() range 
    a:firstline,a:lastline s/some pattern/something else/ 
endfunction 

但是当我尝试加载该函数时,出现错误Missing :endfunction。我也尝试过打电话,正如我在其他教程和示例中注意到的那样,有时调用此类情况。我尝试了call a:firstline,a:lastline s/some pattern/something else/a:firstline,a:lastline call s/some pattern/something else/。用这个,函数加载。但是当我尝试调用函数:2,4 call MyFunc()时,我得到一个指向搜索/替换行的Missing parenthesis错误。

任何人都可以帮助我吗?我还没有找到任何如何在函数调用中执行搜索和替换的示例。

感谢

回答

9

你所得到的错误Missing :endfunction因为函数定义是不完整的。尝试下面给出的一个,应该工作

function! MyFunc() range 
    execute a:firstline . "," . a:lastline . 's/some pattern/something else/' 
endfunction 
+0

缺少':endfunction'是因为记录函数体假人解析器认为'一:firstline'开始':它什么都吃,直到有一个点线append'命令。如果你在它后面添加这样的行和另一个'endfunction',你会得到一个预期的错误,因为':append'命令不能跟着':firstline'。 – ZyX

+0

啊......执行......很好。对于它的价值,我终于找到了一个很好的教程 - http://learnvimscriptthehardway.stevelosh.com/chapters/28.html。谢谢你打破了我! – metasoarous

+0

另外值得注意的是,使用单引号是最好的...虽然...我不完全确定这是为什么。当我使用双引号时,'\ n'被解释为null,这是记录的vim行为,但是当单引号时,被解释为换行符。 – toszter