Como escrever uma coluna de inteiros consecutivos no Vim sobre o texto existente?

6

Por exemplo, imagine que eu tenha o seguinte texto:

/ apple
/ orange
/ banana
/ bread

Como eu poderia adicionar números inteiros consecutivos de maneira eficiente em uma coluna?

/1 apple
/2 orange
/3 banana
/4 bread

Observe que, em problemas reais, a lista pode ter 20, 50 ou mais linhas.

    
por mycat 13.10.2011 / 03:00

2 respostas

6

Uma ideia é usar o recurso de macro vim . Posicione o cursor no primeiro / em / apple e faça:

a1<Esc>

para inserir o primeiro número para iniciar tudo ( <Esc> sendo a chave de escape). Em seguida, com o cursor no 1 recém-inserido, registre a macro (no espaço q ):

qqyiwj0p<C-a>q

Agora você deve ter as duas primeiras linhas numeradas. Agora você pode executar a macro n-2 times, em que n é o número total de linhas que você tem. Por exemplo, se você tiver 50 linhas, a macro é executada 48 vezes, pois já preenchemos 2 linhas manualmente:

48@q
    
por 13.10.2011 / 03:30
2

Você poderia usar o recurso "pipe através de um comando externo" que o vim possui. Abra o arquivo no vim e faça o seguinte:

:%!cat -n | awk '{print $2, $1, $3;}' | sed 's/ //'

Você provavelmente dispensaria o sed (que apenas exclui o primeiro espaço em cada linha) pelo código awk inteligente. Eu não consegui fazer isso funcionar em 30 segundos, então eu saí com sed.

    
por 13.10.2011 / 17:52

Tags