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ó.