:let i=1 | 2,4g/./s/c/\=("[".i."]")/g | let i+=1

上のだと4行目のcは同じ数字にしか置換されない
↓これで

let g:c=0
function! Inc()
let g:c+=1
return g:c
endfunction
:let g:c=0 | 2,4g/^/s/c/\=("[".Inc()."]")/g

:global コマンドを使い慣れてないので2,4g/^/s/cのとこはキレイでないかもしれない