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.
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?
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.
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!
Você pode fazer isso facilmente com paste
:
paste -sd':%!paste -sd'paste -sd':%!paste -sd'%pre%\n' -
\n' file
\n' -
\n' file
Em vim
:
Tags vim vi regular-expression vi-mode