以下是代码:
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次。为什么呢?
答案 0 :(得分:2)
首个自定义vim函数应以大写字母开头。所以它应该是function! Test()
第二,当你在一系列行上调用一个函数时,它实际上会为函数中的每一行调用该函数一次。因此,如果选择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