为什么这个vimscript打印得比它应该多?

时间:2014-02-28 18:16:37

标签: python vim

以下是代码:

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次。为什么呢?

1 个答案:

答案 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