2017-07-28 42 views
2

在我的vimrc文件中,我試圖編寫一個函數,將兩行數字作爲參數,然後註釋掉該範圍中的所有行。我正在使用'^'行的開頭替換,並用'#'替換它,當我從函數外部調用時,它工作正常。對於功能我有這個至今:缺失:vim函數的endfunction錯誤

function Comment(line1, line2) a:line1,a:line2s/^/#/g endfunction

這不,雖然工作,當我嘗試啓動Vim說,我得到一個錯誤「缺少:endfunction這樣」

回答

4

在您的命令:

a:line1,a:line2s/^/#/g 

部分零件是變量(a:line1a:line2)。他們需要被評估。爲此,可以將命令的每個部分都包含在字符串中(變量除外),然後將所有部分與點運算符連接起來,最後將結果傳遞給命令:execute以執行常規Ex命令:

execute a:line1.','.a:line2.'s/^/#/g' 

如果你需要一個命令來調用它,你可以試試這個:

function! Comment(line1, line2) 
    execute a:line1.','.a:line2.'s/^/#/' 
endfunction 

command! -range=% Comment call Comment(<line1>,<line2>) 

它定義了:Comment命令它要求具有相同名稱的功能。它接受範圍,因爲它的定義是-range屬性。如果您不提供範圍給命令,它將使用整個緩衝區,因爲%(= 1,$)被定義爲默認範圍。有關更多信息,請參閱:h user-commands

要使用的命令,你可以直觀地選擇一些線,然後執行:

:'<,'>Comment 

要使用的功能,假設你想發表評論,其地址爲10和20之間的線,你可以執行:

:call Comment(10,20) 

它不鏈接到你的問題,但如果你不一聲巨響添加到關鍵字function,每次你會輸出一個腳本的時候,你就會有錯誤:

E122: Function Comment already exists, add ! to replace it 

的命令同樣的事情,你可能想關鍵字command後添加爆炸,否則你就會有錯誤:

E174: Command already exists: add ! to replace it 
+0

我已經試過這樣做,當我嘗試運行我的評論功能我收到一個錯誤,說'E488:尾隨的字符'。我想因爲我們已經把表達式放入一個字符串中,特殊字符必須被轉義出來嗎? – user2802557

+0

@ user2802557當我執行這個功能時,我沒有這個錯誤,你可以在你的問題中發佈你最後一次嘗試的確切代碼嗎? – user852573

+0

@ user2802557要調用該函數以評論文件的前三行(例如),請嘗試執行':call Comment(1,3)'。我編輯了答案以添加更多關於如何調用函數和命令的信息。 – user852573