2014-02-28 55 views
0

下面是代碼:爲什麼這個vimscript打印比它應該更多?

function! test() 
python << endpy 
import vim 
buf = vim.current.buffer 
(row1, col1) = buf.mark('<') 
(row2, col2) = buf.mark('>') 
for i in range(row1, row2+1): 
    print i 
endpy 
endfunction 

如果你這樣做so %然後ggVG:call test(),你會看到它從1到10多次打印。爲什麼?

回答

2

第一個自定義vim函數應該以大寫字母開頭。所以它應該是function! Test()

其次,當你在一系列線上調用某個函數時,它實際上會爲該函數中的每一行調用該函數一次。所以如果你選擇10行,函數將被調用10次。

要解決這個問題,只需在函數聲明後添加單詞範圍,以便vim知道您將自己處理範圍。

function! Test() range 
python << endpy 
import vim 
buf = vim.current.buffer 
(row1, col1) = buf.mark('<') 
(row2, col2) = buf.mark('>') 
for i in range(row1, row2+1): 
    print i 
endpy 
endfunction 

看看:h E124:h a:firstline:h function-range-example

+0

有趣的是,如果我想讓VIM處理的範圍內?然後行號是動態的,它是一個接一個遞增的。假設我想使用python-vim編寫一個函數在每個選定行的末尾添加一個「A」,並且我不想自己處理範圍? – qed

+0

好吧,我明白了。它在文檔中。謝謝! – qed

相關問題