Vim excluir linhas em branco


674

Que comando posso executar para remover linhas em branco no Vim?

Respostas:


1232
:g/^$/d

:gexecutará um comando nas linhas que correspondem a uma regex. O regex é 'linha em branco' e o comando é :d(excluir)


38
Obrigado soulmerge. Esta é a minha resposta favorita, pois na verdade explica o que o comando: g faz.
Tim Swast 15/08/19

4
Isso excluirá todas as linhas vazias (não contém caracteres de espaço em branco ...), mas esse pode não ser o requisito exclusivo. Alguém ainda pode manter um da linha vazia. :%!cat -spode ser a escolha ..
coanor:

2
: g / ^ \ s * $ / d com um regex de 'qualquer possível caractere espaço' na linha
oyd11

180

Encontrei, é:

g/^\s*$/d

Fonte: Power of g na vim wikia

Breve explicação de :g

:[range]g/pattern/cmd

Isso age no [intervalo] especificado (arquivo inteiro padrão), executando o comando Ex cmd para cada padrão de correspondência de linha (um comando Ex é aquele que começa com dois pontos, como :dpara excluir). Antes de executar o cmd , " ." é definido como a linha atual.


9
Agradável. Mas não é exatamente uma linha em branco.
InnaM 01/04/09

13
Ah, sim, isso corresponderá a linhas contendo apenas caracteres de espaço em branco. Vou aceitar a resposta de soulmerge.
nearly_lunchtime

16
que deve corresponder a linhas em branco E linhas compostas apenas por espaços em branco ... (* corresponde a zero ou várias instâncias de \ s ...)?
precisa saber é o seguinte

14
Eu diria que o espaço em branco puro É EXATAMENTE uma linha em branco, enquanto que nenhum espaço em branco é realmente mais uma linha em branco, não acha? ;)
Kasapo

4
Oxford diz que um espaço em branco é "um espaço a ser preenchido em um documento". Interprete isso como você pode, mas é exatamente isso que eu estava procurando. Obrigado!
31814 Joe Tricarico

53
:v/./d

ou

:g/^$/d

ou

:%!cat -s

7
Truque interessante com o: v /./d (mais fácil de digitar), mas você precisará fazer um: nohl depois.
Claes Mogren

1
@ClaesMogren ou apenas salto no controle-l
JM3

6
@zladuric acordo com vim.wikia.com/wiki/Power_of_g é inversa global (assim faz o comando sobre tudo o que não corresponde)
adam_0

44

O seguinte pode ser usado para remover apenas várias linhas em branco (reduza-as a uma única linha em branco) e deixar intactas as linhas em branco:

:g/^\_$\n\_^$/d

3
Alguém poderia explicar o que significam os tokens? (Então, como isso funciona?) Obrigado.
PAStheLoD

5
\_$significa o final da linha que pode ser usado dentro de um padrão ( $só pode ser usado no final do padrão). O mesmo ocorre com \_^isso significa o início de uma linha e pode ser usado em qualquer lugar dentro do padrão. Portanto, o padrão corresponde a uma linha vazia, uma nova linha e novamente uma linha vazia. Consulte a página de ajuda do Vim regex .
Wiktor Stribiżew 30/03

1
Outra maneira de fazer o mesmo::g/^$/,/./-j
SergioAraujo

14
  1. como remover todas as linhas em branco

    :%s,\n\n,^M,g
    

    (faça isso várias vezes util todas as linhas vazias foram embora)

  2. como remover todas as linhas em branco deixando ÚNICA linha vazia

    :%s,\n\n\n,^M^M,g
    

    (faça isso várias vezes)

  3. como remover todas as linhas em branco deixando DUAS linhas vazias no máximo,

    :%s,\n\n\n\n,^M^M^M,g
    

    (faça isso várias vezes)

para inserir ^ M, eu tenho que controlar-Q e control-M no Windows


2
Você também pode usar \rno lugar do Ctrl-M.
traço-tom-bang

6

E se:

:g/^[ \t]*$/d

5

trabalhe com perl no vim:

:%!perl -pi -e s/^\s*$//g


Meu perl pode estar um pouco enferrujado, mas chomptambém não faria o trabalho?
Mark K Cowan


5

Esta função remove apenas duas ou mais linhas em branco, coloque as linhas abaixo no seu vimrc e use \ d para chamar a função

fun! DelBlank()
   let _s=@/
   let l = line(".")
   let c = col(".")
   :g/^\n\{2,}/d
   let @/=_s
   call cursor(l, c)
endfun
map <special> <leader>d :keepjumps call DelBlank()<cr>

4

Tentei algumas das respostas nesta página, mas muitas delas não funcionaram para mim. Talvez porque eu esteja usando o Vim no Windows 7 (não zombe, só tenha pena de mim: p)?

Aqui está o mais fácil que eu achei que funciona no Vim no Windows 7:

:v/\S/d

Aqui está uma resposta mais longa no Vim Wikia: http://vim.wikia.com/wiki/Remove_unwanted_empty_lines


3
:g/^\s*$/d
^ begin of a line
\s* at least 0 spaces and as many as possible (greedy)
$ end of a line

colar

:command -range=% DBL :<line1>,<line2>g/^\s*$/d

no seu .vimrc, reinicie o seu vim. se você usar o comando: 5,12DBL, ele excluirá todas as linhas em branco entre a quinta e a 12ª linha. Eu acho que minha resposta é a melhor resposta!


Ao postar respostas, adicione uma explicação descrevendo o que você alterou ou adicionou ou como funciona ou algo assim. Embora sua resposta possa ser a solução, é provável que algumas pessoas que leem isso não entendam o que significa ou como funciona. E por favor faça isso em inglês.
Tim

Isso realmente não importa aqui. Esta questão aceitou uma resposta há 5 anos
Tim

Acho que a resposta de soulmerge: g / ^ $ / d não é a melhor resposta. E edito para melhorar sua resposta com: g / ^ \ s * $ / d. mas por que não consigo assistir minha edição em "mostrar todas as edições dessa pose"?
fácil

Minha resposta é melhor que a dele, e quem rejeitou minha resposta e por que minha resposta foi rejeitada?
cn8341

2

Se algo tiver linhas duplas no espaçamento do texto, esse comando removerá o espaçamento duplo e mesclará as linhas em branco repetidas preexistentes em uma única linha em branco. Ele usa um delimitador temporário de ^^^ no início de uma linha, portanto, se isso entrar em conflito com seu conteúdo, escolha outra coisa. Linhas contendo apenas espaço em branco são tratadas como em branco.

%s/^\s*\n\n\+/^^^\r/g | g/^\s*$/d | %s/^^^^.*

2

Pressione a deletetecla no modo de inserção para remover linhas em branco.


1

Isso funcionou para mim:

:%s/^[^a-zA-Z0-9]$\n//ig

Ele basicamente exclui todas as linhas que não possuem um número ou letra. Como todos os itens da minha lista tinham letras, todas as linhas em branco foram excluídas.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.