在我的vimrc文件中,我試圖編寫一個函數,將兩行數字作爲參數,然後註釋掉該範圍中的所有行。我正在使用'^'行的開頭替換,並用'#'替換它,當我從函數外部調用時,它工作正常。對於功能我有這個至今:缺失:vim函數的endfunction錯誤
function Comment(line1, line2) a:line1,a:line2s/^/#/g endfunction
這不,雖然工作,當我嘗試啓動Vim說,我得到一個錯誤「缺少:endfunction這樣」
在我的vimrc文件中,我試圖編寫一個函數,將兩行數字作爲參數,然後註釋掉該範圍中的所有行。我正在使用'^'行的開頭替換,並用'#'替換它,當我從函數外部調用時,它工作正常。對於功能我有這個至今:缺失:vim函數的endfunction錯誤
function Comment(line1, line2) a:line1,a:line2s/^/#/g endfunction
這不,雖然工作,當我嘗試啓動Vim說,我得到一個錯誤「缺少:endfunction這樣」
在您的命令:
a:line1,a:line2s/^/#/g
部分零件是變量(a:line1
和a: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
我已經試過這樣做,當我嘗試運行我的評論功能我收到一個錯誤,說'E488:尾隨的字符'。我想因爲我們已經把表達式放入一個字符串中,特殊字符必須被轉義出來嗎? – user2802557
@ user2802557當我執行這個功能時,我沒有這個錯誤,你可以在你的問題中發佈你最後一次嘗試的確切代碼嗎? – user852573
@ user2802557要調用該函數以評論文件的前三行(例如),請嘗試執行':call Comment(1,3)'。我編輯了答案以添加更多關於如何調用函數和命令的信息。 – user852573