Como juntar todas as segundas linhas no Vim?

25

Gostaria de participar de um lote (~ 1000) de linhas, mas apenas de todas as ímpares com a próxima. Com a mão eu poderia fazer

Jj

500 vezes e pronto. No entanto, como posso executar essas duas instruções 500 vezes em um único comando? Digitando

500Jj

irá juntar as próximas 500 linhas e então se movendo para baixo uma linha.

Exemplo:

Eu tenho:

a
b
c
d
e
f
g
h

Eu quero:

a b
c d
e f
g h

Edit: Eu tentei mapear:

:map X Jj
500X

mas aparentemente eu devo ler os documentos de mapeamento novamente. Não funciona.

    
por Boldewyn 28.07.2010 / 19:52

5 respostas

27

eu faria isso:

  1. comece a gravar uma macro 'q': qqJjq

  2. reproduza a macro 'q' 500 vezes: 500@q

(na verdade não é uma macro chamada 'q', é um registrador nomeado chamado 'q'. Em vez de preencher interativamente esse registro como em 1., você também pode fazer :let @q = "Jj" e então fazer 2.)

    
por 28.07.2010 / 20:21
23

Para fazer isso em todas as linhas do arquivo:

:%normal J

ou menor:

:%norm J

Para fazer isso em apenas uma parte do arquivo, selecione as linhas com V ou obtenha um intervalo de alguma outra forma:

:'<,'>global/^/normal J

ou menor:

:'<,'>g/^/norm J
    
por 28.07.2010 / 21:17
7

E sobre isso

: g / $ / j
ou
: g / $ / j!
e agrupar a cada 3 linhas
: g / $ / j3

    
por 13.10.2015 / 13:29
0

Também podemos jogar com:

'<,'>g//s/.*\zs\n\ze.*/ /
    
por 28.07.2010 / 22:32
-1

Eu não sou usuário do Vim, mas verificando a documentação on-line parece

500(Jj) 

pode funcionar porque analisa as coisas entre parênteses como uma unidade.

    
por 28.07.2010 / 19:55