2013-07-04 86 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