将命令范围传递给函数

时间:2012-05-13 15:37:54

标签: vim

我正在尝试定义一个可以获取范围并将其传递给函数的命令。这就是我认为我应该拥有的:

function! PrintGivenRange() range
    echo "firstline ".a:firstline." lastline ".a:lastline
    " Do some more things
endfunction

command! -range PassRange call PrintGivenRange()

然而,它不起作用,似乎只通过了第一行。

e.g。

:1,5PassRange "outputs firstline 1 lastline 1
:1,5call PrintGivenRange() "outputs firstline 1 lastline 5
" if you select lines in visual mode, same thing for both

我已经阅读了:help command-range但仍未能解决这个问题。我应该将前缀中的范围传递给call吗?我该如何解决这个问题?

2 个答案:

答案 0 :(得分:22)

您需要明确传递范围,请尝试:

command! -range PassRange <line1>,<line2>call PrintGivenRange()

答案 1 :(得分:0)

如果你想在可视模式下使用当前选中行的范围,你可以使用下面的:

command! -range PassRange '<,'> call PrintGivenRange()
  • '<:当前缓冲区中当前选中可视区域的第一行。
  • '>:当前缓冲区中当前选中可视区域的最后一行。