Inserir texto numerado em cada linha par / ímpar

1

No Vim tenho o seguinte texto:


Door

Chair

Table

Uganda

E eu quero adicionar texto numerado em todas as linhas ímpares, o que deve dar isto:

>item1
Door
>item2
Chair
>item3
Table
>item4
Uganda

Isso é possível no vim?

    
por Mehdi Nellen 02.06.2014 / 18:45

2 respostas

4

Você pode experimentar este comando que, por não ser intuitivo, aumenta i em cada partida:

:let i = 1 | g/^$/execute "normal i>item" . i | let i = i + 1
    
por 03.06.2014 / 00:00
1

Aqui está um vimscript para fazer isso:

:for s:i in range(1, line("$") / 2)
:  execute "normal " . eval(s:i * 2 - 1) . "gg"
:  execute "normal a" . ">item" . s:i
:endfor
  • Faz loop sobre metade das linhas no arquivo (já que queremos apenas as mais estranhas).
  • Mova para o número de linha apropriado (o número do item * 2 - 1 fornecerá a próxima linha ímpar) usando gg .
  • Anexe >itemX à linha, em que X é o número do item.

Você pode inserir isso diretamente na linha de comando do vim ou colocá-lo em um arquivo e, em seguida, executá-lo usando :source <filename> .

Alternativamente, você pode adicionar isto como uma função ao seu .vimrc, e então executá-lo usando :call <funcname()> .

    
por 02.06.2014 / 20:13

Tags