Vimscript函数范围仅适用于第一行

时间:2015-03-10 16:14:09

标签: vim

我正在尝试创建自己的评论功能,用于学习vimscript。

我做了以下事情:

function! Comment() range
  for line_number in range(a:firstline, a:lastline)
    let current_line = getline(line_number)
    let current_line_commented = substitute(current_line, '^', '# ', "")
    call setline(line_number, current_line_commented)
  endfor
endfunction

command! -range Comment call Comment()

但是,当使用给定范围(:'<,'>Comment)调用命令时,只有选择的第一行才会在前面添加#,并且不会报告其他错误。

我缺少什么来取代范围内的每一行?

1 个答案:

答案 0 :(得分:5)

与映射(在可视模式下调用时自动获取:'<,'>前置于函数:call)不同,自定义命令需要明确传递范围:

command! -range Comment <line1>,<line2>call Comment()
不幸的是,

:help :command-range只提到了相关的<count>,但您会在:help <line1>.

找到更深层次的信息。