Como combinar duas linhas de uma só vez no vim

1

Eu tenho um arquivo que contém registros com formato separado por tabulações, mas em duas linhas, quero organizar registros em uma linha com valores separados por tabulações usando a correspondência de padrão do editor de vim.

Abc     PQR     XYZ     NMW
    XYX     PQR     LMW
PLX     PXQ     LPN     PWF
    XYQ     PLP     PMQ    LWP

Eu quero adicionar cada segunda linha do registro à primeira linha de registros. O formato de saída que eu quero é assim.

Abc     PQR     XYZ     NMW    XYX     PQR     LMW
PLX     PXQ     LPN     PWF    XYQ     PLP     PMQ     LWP

Eu tentei o seguinte comando para resolver o meu problema.

:%s/\n(\w\+.*)/\t/cgi

Isso está substituindo cada linha de dados pela guia na frente, exceto na primeira linha.

Como podemos resolver isso usando o padrão vim match and replace?

    
por Raghvendra 22.12.2015 / 16:52

3 respostas

7

Que tal

:%s/\n\s\+/\t/gc

Isso encontrará qualquer caractere de nova linha seguido de espaço em branco e substituirá tudo com uma guia combinando suas linhas.

    
por 22.12.2015 / 16:57
2

Se você sabe que a primeira linha sempre começa com uma letra e a segunda linha sempre começa com uma tabulação, a maneira mais vimmy de fazer isso provavelmente seria usar :g (execute um comando ex em todas as linhas correspondentes um regex) e j! (junte-se sem remover o espaço em branco). Confira help :g e help :j . Combinando estes, você pegaria

:%g/^\w/j!
    
por 22.12.2015 / 19:12
1

Você pode fazer isso facilmente com paste :

paste -sd'
:%!paste -sd'
paste -sd'
:%!paste -sd'%pre%\n' -
\n' file
\n' -
\n' file

Em vim :

%pre%     
por 22.12.2015 / 17:04