Você pode usar o pydo
comando disponível desde o Vim 7.4, o manual descreve como funciona melhor do que eu:
: [range] pydo {body}
Execute a função Python "def _vim_pydo (linha, roupa): {body}" para cada linha no [range], com os argumentos da função sendo definidos no texto de cada linha, sem um <EOL> à direita, e o atual número da linha. A função deve retornar uma sequência ou Nenhuma. Se uma string for retornada, ela se tornará o texto da linha na curva atual. O padrão para [range] é o arquivo inteiro: "1, $".
Para o seu exemplo, você pode usar um comando como:
:python import vim
:pydo vim.current.buffer[linenr - 1] = '[%s]' % line
O linenr - 1
bit existe porque as linhas vim.current.buffer
são indexadas em 0, mas o Vim começa a contar as linhas de 1.
O bom é que você pode definir facilmente um comando personalizado para executar seu código Python em várias linhas:
command! -range=% BracketLines
\ <line1>,<line2>pydo vim.current.buffer[linenr - 1] = '[%s]' % line