自动添加序号

需求

给一段文字自动添加序号,要求本行的序号可以根据上一行的序号自动增一,若上一行没有序号,则从 1 开始

实现

用 ruby 编写 vim 脚本非常容易实现

" 每行的前面添加序号,根据上一行序号自动递增,若上一行没有序号,则从1开始
function! num#add_num()
ruby << EOF
  def get_current_line()
    count = 0
    " 得到当前缓冲区
    cb = Vim::Buffer.current
    " 得到上一行的行号
    previousLine = cb.line_number - 1
    " 如果行号存在,并且以数字开头
    if previousLine >= 1 && cb[previousLine] =~ /^\d+/
    " 得到上一行的序号
      count = $&.to_i
    end
    " 修改本行内容
    cb.line = "#{count + 1}. #{line}"
  end
get_current_line()
EOF
endfunction

添加自定义命令

.vimrc中,添加如下一行

command! -range=% AddNum :<line1>,<line2> cal num#add_num()
关于自定义命令请查看这篇文章:vim 添加自定义命令

演示