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

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

[ Hits: 1.894 ]

Blog: https://www.instagram.com/alexabolada/

 


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

Guia de Certificação Linux

Vantagens de usar o Vim ao invés do VSCode

Problemas em diretório com milhares de arquivos [Resolvido]

Como fazer o editor Vim mostrar/ocultar os números das linhas

O comando tail

Leitura recomendada

Plugin auto-pairs no Vim

Vim - como executar uma linha do texto no terminal

Como editar arquivos remotos usando o Vim

"Ctrl + a" para selecionar tudo no Vim

Vim - fazer JOIN de múltiplas linhas

  

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