Digamos que eu tenho o seguinte arquivo muito simples
a
b
c
d
e
e decidi que quero adicionar linhas vazias após cada linha. Vários métodos diferentes imediatamente saltam à minha mente. Podemos apenas fazê-lo (e assim abraçar o fracasso). Podemos gravar uma macro como qqo<ESC>jq
e repeti-la várias vezes.
Dois outros métodos pareciam mais óbvios para mim na época.
Em primeiro lugar, pensei em emitir o :norm
comando o
em cada linha. Então eu corro :%norm o
. Mas o que realmente acontece é que obtemos 5 linhas em branco, seguidas pelas linhas não separadas, como acima. Interpreto que isso significa que %norm
, por meio do vim, na verdade, a mensagem é exibida com o seguinte comando normal nas cinco primeiras linhas desse arquivo de cinco linhas . O o
comando cria uma nova linha e o vim é "burro" no sentido de que faz referência pelo número da linha e não por algum outro identificador.
Bem, eu estava envergonhado. Certo. Tentei algumas outras coisas para ver se conseguia fazer o método acima funcionar, mas, infelizmente, não consegui. Por curiosidade, tentei meu outro método favorito de aplicação em massa. Isso me levou a tentar :g/^/norm o
. Para minha surpresa, isso funciona muito bem! Então, aos meus olhos, parece que o vim não é "burro" aqui da mesma maneira que acima e faz referência a linhas por mais do que apenas o número da linha.
O que exatamente está acontecendo?
:%s/$/\r/
ou assim::%s/\n/\r\r/
. O argumento é que as novas linhas podem ser correspondidas\n
, mas precisam ser escritas como\r
nos valores de substituição.