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?
答案 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中实现。