Vim - juntar múltiplas linhas em uma só (JOIN)

Publicado por Fábio Berbert de Paula em 23/11/2020

[ Hits: 2.216 ]

Blog: https://fabio.automatizando.dev

 


Vim - juntar múltiplas linhas em uma só (JOIN)



Dica rápida de como juntar múltiplas linhas em uma só usando a poderosa IDE Vim.

Supondo que temos o seguinte arquivo de texto com uma lista de distribuições Linux:

Slackware
Fedora
Debian
Ubuntu
CentOS
Gentoo

Para juntar TODAS as linhas em uma só, use o comando 'j' de forma global:

:%j

Onde '%' indica todas as linhas do documento e 'j' é o comando JOIN.

Como resultado teremos:

Slackware Fedora Debian Ubuntu CentOS Gentoo

Note que o 'j' adiciona um espaço em branco como delimitador entre as linhas. Para unir as linhas sem espaço, use a flag '!':

:%j!

Como resultado teremos:

SlackwareFedoraDebianUbuntuCentOSGentoo

Também é possível especificar quais linhas você quer unir informando uma range. Por exemplo, unir as linhas 3, 4 e 5:

:3,5 j

Como resultado teremos:

Slackware
Fedora
Debian Ubuntu CentOS
Gentoo

Também é possível teclar 'v' para entrar no modo visual, selecionar as linhas desejadas e em seguida teclar 'j' para uni-las.

Bônus

Para ordenar as linhas temos o comando sort. Você pode usar o comando global, range ou modo visual combinado com 'sort'.

Para ordenar todas as linhas:

:%sort

Como resultado teremos:

CentOS
Debian
Fedora
Gentoo
Slackware
Ubuntu

No Vim podemos combinar dois comandos pelo separador '|', então vamos ordenar e em seguida juntar as linhas:

:%sort | %j

Como resultado teremos:

CentOS Debian Fedora Gentoo Slackware Ubuntu

Infelizmente o JOIN não permite especificarmos um delimitador diferente de espaço, pelo menos não encontrei essa informação. É possível contornar esse problema usando o comando "substitute" ao invés do JOIN. Por exemplo, unir todas as linhas do documento adicionando uma vírgula + espaço no final:

%s/\n/, /

Resultado:

Slackware, Fedora, Debian, Ubuntu, CentOS, Gentoo,

Comando final: ordenar as linhas, adicionar uma vírgula + espaço como delimitador e evitar que a última linha fique com vírgula + espaço no final:

%sort | 1,$-1 s/\n/, /

Resultado:

CentOS, Debian, Fedora, Gentoo, Slackware, Ubuntu

A novidade no comando final foi o 'range' definido. Ao invés de usar '%' para o documento inteiro, o que inclui a última linha, defini range como da linha 1 até a última linha decrescida de 1:
  • o caractere '$' representa a última linha do documento;
  • '$-1' representa a última linha menos 1.

Vim é brabo demais! Por hoje é só.

Outras dicas deste autor

Comando find: expressões regulares e exclusão de diretórios

Baixando arquivos de FTP recursivamente

Imprimindo repetidamente uma palavra ou frase na tela

Como checar se sua placa possui sinal físico de rede

WindowMaker como Desktop padrão

Leitura recomendada

Resolvendo o problema de acentuação em Português no VIM

Vim - selecionar tudo e copiar fácil

Vim - fazer JOIN de múltiplas linhas

Instalando Vim 8.2 completo no Linux Mint 20

Habilitar highlight na busca do Vim

  

Comentários
[1] Comentário enviado por maurixnovatrento em 25/11/2020 - 13:09h


Show.

___________________________________________________________
[code]Conhecimento não se Leva para o Túmulo.
https://github.com/MauricioFerrari-NovaTrento [/code]



Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts