Que comando posso executar para remover linhas em branco no Vim?
Que comando posso executar para remover linhas em branco no Vim?
Respostas:
:g/^$/d
:g
executará um comando nas linhas que correspondem a uma regex. O regex é 'linha em branco' e o comando é :d
(excluir)
:%!cat -s
pode ser a escolha ..
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
:d
para excluir). Antes de executar o cmd , ".
" é definido como a linha atual.
:v/./d
ou
:g/^$/d
ou
:%!cat -s
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
\_$
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 .
:g/^$/,/./-j
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)
como remover todas as linhas em branco deixando ÚNICA linha vazia
:%s,\n\n\n,^M^M,g
(faça isso várias vezes)
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
\r
no lugar do Ctrl-M
.
E se:
:g/^[ \t]*$/d
trabalhe com perl no vim:
:%!perl -pi -e s/^\s*$//g
chomp
também não faria o trabalho?
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>
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
: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!
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/^^^^.*
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.