VIM,Python:如何使用vim.current.range生成的范围对象

时间:2014-11-02 10:40:39

标签: python vim

function! Cut()
python3 << EOF
import vim
cw = vim.current.window
pos = cw.cursor

cr = vim.current.range
x = cr.end - cr.start

vim.command('y')
vim.command(':normal! gv')

print(cr)
print(cr.start)
print(x)

while x:
    vim.command('d')
    x -= 1
EOF
endfunction



I get:
<range ... (10:10)>
9
0
<range ... (11:11)>
10
0
so on..

为什么我会收到多个打印调用 - 每行选择1个调用?范围对象不应该给你选择的行范围 - 它不是这样做的,而是迭代我的行并设置start = current_line_number?

1 个答案:

答案 0 :(得分:2)

如果您想在函数中自己处理range,则在声明/定义函数时应添加range参数。 :h function-range-example,然后您可以在函数中通过a:firstline and a:lastline获取范围信息。例如:

function Foo() range
    let start = a:firstline
...
endfunction

通过这种方式,您可以将范围传递给您的函数一次。但是,如果你这样做,就像你所做的那样:

function Foo()
    echo "foo"
endfunction

然后执行1,10call Foo(),您将看到将打印10 foo(回显)。是的,对于每一行,都调用了你的函数。

这是基本规则,无论你在python还是vimscript中实现。