É bastante comum ao programar ou abrir arquivos de texto para encontrar arquivos com espaço em branco à direita no final de uma linha. O vim tem uma maneira de mostrar isso configurando a trail
opção na listchars
opção e depois ligando list
.
No entanto, qual é a maneira mais fácil de eliminar esse espaço em branco global em todo o arquivo (idealmente sem um plug-in)?
whitespace
line-breaks
Andrew Ferrier
fonte
fonte
:h vim-faq
e pesquisar/trailing
. A tag difícil de memorizar é:h faq-12.1
.Respostas:
Use uma combinação de teclas para remover todo o espaço em branco à direita
Como algumas páginas que eu edito realmente precisam de espaços em branco à direita (por exemplo, markdown) e outras não, eu configurei uma combinação de teclas para F5que seja fácil fazer isso sem ser automático. Para fazer isso, adicione o código abaixo (de vim.wikia) ou alguma variação dele ao seu
.vimrc
:nnoremap <F5>
faz um mapeamento não-recursivo para a chaveF5
no modo normal:let _s=@/
armazena o último termo de pesquisa (da macro@/
) na variável_s
<Bar>
As funções como um símbolo|
de barra vertical para separar comandos, no entanto|
, encerrariam um comando nesse contexto; portanto,<Bar>
devem ser usadas.:%s/\s\+$//e
procura por espaço em branco à direita e exclui-o em todos os lugares do buffer (consulte a resposta do CarpetSmoker para obter uma análise detalhada dessa expressão)let @/=_s
restaura seu último termo de pesquisa na macro@/
, para que fique disponível na próxima vez que você clicarn
.<CR>
termina o mapeamento... ou seja mais seletivo
Se você tiver casos em que não deseja remover todo o espaço em branco à direita, poderá usar um padrão para ser mais seletivo. Por exemplo, o código a seguir mostra como removo o espaço em branco à direita somente se vier após um ponto-e-vírgula (aqui está vinculado F8).
Isso é útil se, como eu, você tiver alguns arquivos com heredocs semelhantes a descontos, intercalados entre instruções de programação terminadas em ponto e vírgula.
fonte
:keeppatterns
evitar a substituição@/
. E também dê uma olhada:keepjumps
.:help keeppattern
e não recebi nada.:nohl
, se estiver destacando algo, ele continuará destacando (veja minha resposta atualizada).A maneira "mais simples" é usar apenas
:substitute
::%s
para:substitute
ultrapassar o intervalo%
, que é o buffer inteiro.\s
t corresponde a todos os caracteres de espaço em branco.\+
repeti-las 1 ou mais vezes.$
ancorar no final da linha.e
sinalizador para não dar erro se não houver correspondência (ou seja, o arquivo já está sem espaço em branco à direita).No entanto, essa provavelmente não é a melhor maneira, pois causa dois efeitos colaterais:
Você pode corrigir os dois itens, transformando isso em uma função:
E então use-o como:
winsaveview()
vai salvar a "visão" atual, que inclui a posição do cursor, dobras, saltos, etc. Awinrestview()
no final vai restaurar este a partir da variável salvo.:keeppatterns
impede que o\s\+$
padrão de ser adicionado ao histórico de pesquisa.Como isso é um pouco irritante para digitar
:call
o tempo todo, você pode definir um comando:Que pode ser usado sem o
:call
:E é claro que você pode vinculá-lo a uma chave:
Algumas pessoas gostam de fazer isso automaticamente antes de gravar um arquivo em disco, como:
Não gosto, pois alguns formatos exigem espaços em branco à direita (como Markdown) e, em outras ocasiões, você deseja espaços em branco no código (como formatar um email e usar o
--<Space>
marcador para indicar o início de uma assinatura) )Modo de plugue sem vergonha: há algum tempo, escrevi um pequeno script Python para limpar o espaço em branco de um projeto inteiro de uma só vez.
fonte
`
duas vezes após a substituição. Isso abre a possibilidade de criar um oneliner como este:%s/\s\+$//e | exe "normal ``"
Para excluir todo o espaço em branco à direita (no final de cada linha), você pode usar o comando:
Para incluir guias, use em
\s
vez do espaço.Na linha de comando:
Todos os arquivos no diretório atual (use recursivamente
**/*.*
):Maneira Python:
ou:
Use
lstrip()
para a faixa esquerda (à direita),rstrip()
para a faixa direita (à esquerda) oustrip()
para remover de ambas as extremidades.Aqui está uma função útil que remove o espaço em branco supérfluo do final de uma linha que você pode adicionar ao seu
.vimrc
:Há também o plugin DeleteTrailingWhitespace para isso.
Destacando espaços em branco
Para verificar se todos os espaços à direita se foram, use:
Digite
/ $
para encontrá-los. Se houver, o vim os destacará para você.Use cores para destacá-las:
Use caracteres visíveis ( origem ):
Veja também: Destacar espaços indesejados
Para destacar o espaço em branco à direita, por padrão, você pode configurar o seu da
.vimrc
seguinte maneira:Removendo espaços em branco por padrão
Se você deseja garantir que todos os espaços em branco à direita de um arquivo sejam removidos automaticamente ao salvar, você pode adicionar o seguinte comando ao seu
.vimrc
:o que não é recomendado, pois removerá os espaços em branco finais de todos os arquivos que um usuário salvar (mesmo onde os espaços em branco possam ser desejados).
Veja também:
fonte
Explicando um pouco a resposta de Christopher Bottoms : Jonathan Palardy escreveu um bom artigo sobre isso . Nele, ele escreve funções,
Preserve(command)
que preservam o estado do editor (principalmente a posição do cursor e o último padrão de pesquisa) enquanto executa um comando arbitrário:Isso tem a vantagem de ser multiuso, por exemplo, você pode usá-lo para substituir todos os espaços em branco à direita (como Jonathan faz) mapeando isso para:
Você também pode usá-lo para um mapeamento de modo visual para remover apenas os espaços finais nas linhas visualmente selecionadas:
E você pode usá-lo para outras chamadas, como formatar todo o documento
=
enquanto mantém seu lugar (use uma tecla diferente dessa vez para não entrar em conflito):No geral, achei a
Preserve(command)
função uma boa ferramenta para ter.fonte
@/
, não é necessário se preocupar com isso (neste caso, de qualquer maneira).winsaveview()
ewinrestview()
são muito superiores.Outra versão da função StripTrailingSpaces:
REALMENTE EXISTE UM ERRO NESTA FUNÇÃO (este): a possibilidade não está sendo mantida devido à opção "alcance". ele é removido, funciona muito bem, no entanto, estou compartilhando o código para receber alguma ajuda.
Como você pode ver, ele também usa a função Preserve vista acima, mas de uma maneira um pouco diferente.
A diferença aqui é que eu posso selecionar um intervalo de linhas ou um parágrafo
vip
e, em seguida, o intervalo:'<,'>
aparecerá automaticamente no prompt de comando.A ideia veio do post Bez Hermoso .
fonte