Sublime Text 2: apare o espaço em branco final sob demanda

99

Eu sei que Sublime Text 2 pode excluir o espaço em branco final nos arquivos ao salvar.

Quando se trabalha em equipe e se compromete uma mudança em um arquivo, isso tende a produzir grandes diferenças que tornam a revisão do código por pares mais complicada. Por esse motivo, prefiro fazer apenas a limpeza dos espaços em branco quando estou submetendo grandes alterações a um arquivo e deixar os espaços em branco como estão para as pequenas alterações.

Gostaria de saber se existe algum comando para executar o recorte do espaço em branco sob demanda em um arquivo, além de "Activate trimming on save > Save file > Deactivate trimming".

Pesquisando na Documentação e no stackoverflow não mostrou nada relevante, todos os links parecem falar sobre o corte automático ao salvar.

José Luis
fonte
1
Isso não responde diretamente à sua pergunta, mas pode ajudar se você estiver usando Git para controle de versão: o $ mv .git/hooks/pre-commit.sample .git/hooks/pre-commitque eu obtive neste blog .
Paul Fioravanti
97
Para outros Googlers: a maneira não sob encomenda é adicionar esta configuração:"trim_trailing_white_space_on_save": true
Nate Glenn
3
Como um aprimoramento para o comentário de @Nate Glenn, observe que cortar o espaço em branco do Markdown pode causar problemas, especialmente se você cortar o espaço em branco intencional de outra pessoa e cometê-lo sem perceber. Você pode editar Markdown.sublime-settingse desativar o ajuste global ao salvar e evitar contratempos.
tehfoo
IMPORTANTE: Se houver mais de 1 linha entre as {} chaves, certifique-se de colocar ',' na linha acima ou você receberá um erro ao tentar salvar.
slindsey3000 de
1
"Quando se trabalha em equipe e se compromete uma alteração em um arquivo, isso tende a produzir grandes diferenças que tornam a revisão do código por pares mais complicada". idealmente - precisamente porque cria o tipo de manchas sujas a que você alude. Banir espaços em branco à direita em seus padrões de codificação e capturar commits com espaços em branco inválidos em seus ganchos de linter / commit.
Frank Farmer

Respostas:

71

Cuidado: usar este plugin torna o Sublime Text significativamente mais lento

Eu uso o plugin TrailingSpaces para isso.

Destaque os espaços finais e exclua-os em um flash.

ST2 fornece uma maneira de excluir automaticamente os espaços finais ao salvar o arquivo. Dependendo de suas configurações, pode ser mais prático apenas destacá-los e / ou excluí-los manualmente. Este plugin fornece exatamente isso!

Uso: clique em "Editar / Espaços à direita / Excluir".

Para adicionar uma combinação de teclas, abra "Preferências / Ligações de teclas - Usuário" e adicione:

{ "keys": ["ctrl+alt+t"], "command": "delete_trailing_spaces" }
Sridhar Katakam
fonte
1
Sim, eu gosto mais desta resposta ... atualização segura + simplesmente funciona - obrigado
Rob
1
Percebi que o recurso ctrl + F para encontrar palavras fica lento depois que eu instalei este plugin, então eu o removi, você pode me dizer se a mesma situação acontecer com você?
dennisbot
Ctrl + Shift + T é usado para abrir a última guia fechada no Sublime. Então, eu prefiro Ctrl + Alt + T
Pawel
5
Existe uma opção chamada trailing_spaces_trim_on_save, que você pode definir trueem Preferences > Package Settings > Trailing Spaces > Settings - User. Você pode usar isso em vez de vincular um atalho de teclado, acho que é o melhor para minhas necessidades
dspacejs
Aviso: rolar por arquivos grandes torna-se significativamente mais lento com este plugin instalado.
compie
66

Eu uso estas etapas para uma solução rápida sob demanda dentro do Sublime Text:

  1. Localizar> Substituir ...
  2. Encontre o que: [ \t]+\n
  3. Substituir com: \n
  4. Substitua tudo

Você também pode fazer isso para um grande conjunto de arquivos via

  1. Localizar> Localizar em arquivos ...
  2. Encontrar: [ \t]+\n
  3. Onde:
  4. Substituir: \n
  5. Substituir
Jason Favors
fonte
5
Este método funciona para todas as linhas, exceto a última.
Joncom
1
@Joncom está correto sobre a última linha. No Sublime Text 3, \tnão parece corresponder aos espaços, portanto, a resposta conforme escrita remove apenas as guias finais. Acho que prefiro \s+\n, mas observe que também exclui as linhas em branco. Se você deseja remover os espaços em branco na linha final, bem que você pode adicionar \s+\zassim: (\s+\n|\s+\z).
canhascodez
3
([\t ]+\n|\s+\z)<- não remove as linhas em branco.
canhascodez
4
O regex correto deve ser [ \t]+$e substituí-lo por nada.
Codesmith
27

Você pode simplesmente usar um regex para remover os espaços em branco à direita:

  1. Localizar> Substituir ...
  2. Encontre o que: [^\S\r\n]+$
  3. Substitua por: deixe vazio.
  4. Clique em 'Substituir tudo'

[^\S\r\n]+$é Regex para "pelo menos um caractere de espaço em branco (portanto, espaços e tabulações, mas não novas linhas, usando uma negação dupla) seguido pelo final da linha"

A expressão regular deve ser habilitada: Habilitar regex na caixa de diálogo de pesquisa

antou
fonte
22

Esta é uma maneira super simples que não usa plug-ins ou configurações e funciona na maioria das situações.

  1. Selecione e mova o cursor para o final de cada linha
  2. Segure CTRL-Shift, pressione esquerda, direita
  3. Os espaços e tabulações no final das linhas devem agora ser selecionados. Pressione Delete ou Backspace

    Observação - caracteres especiais como (e + também podem ser selecionados no final da linha neste ponto, não apenas espaços.

Como fazer a seleção múltipla de todas as linhas:

Uma maneira é usar o botão do meio do mouse para selecionar verticalmente e, em seguida, apertar a tecla End se for uma seleção pequena.

Com teclas de atalho:

  1. CTRL-A (selecionar tudo)
  2. CTRL-SHIFT-L (colocar o cursor em todas as linhas selecionadas)
  3. END (vai para o fim das linhas)

Você também pode usar a função find para encontrar algo que estará em todas as linhas, como o caractere de espaço:

  1. \ s (usando regex)
  2. Clique em Encontrar Tudo
  3. Pressione a tecla "End" para obter vários cursores no final de cada linha

Texto de amostra:

text and number     44  more text and a space  
text and number 44  more text and 2 tabs        
text and number 44  more text and no space or tab

text and number 44  more text after a line feed
Shanemgrey
fonte
2
Nota: Para destacar todas as linhas com o multi-cursor na última posição, você pode usar CTRL + A seguido por CTRL + SHIFT + L seguido por END.
Richard Marskell - Drackir
2
Usando essa técnica em outros conjuntos de dados, descobri que não é perfeita. Sublime Text também destacará caracteres especiais como) e + junto com espaços à direita. Tenha cuidado se alguns dos dados terminam em caracteres especiais.
shanemgrey
2
Além disso, FYI \sem regex não só corresponde ao caractere de espaço, mas também tabulações e novas linhas (ou seja, "espaço em branco") não apenas espaços. :)
Richard Marskell - Drackir
13

Eu encontrei uma explicação aqui: http://www.sublimetext.com/forum/viewtopic.php?f=4&t=4958

Você pode modificar o pacote

trim_trailing_white_space.py

localizado no diretório de pacotes padrão, desta forma:

import sublime, sublime_plugin

def trim_trailing_white_space(view):
    trailing_white_space = view.find_all("[\t ]+$")
    trailing_white_space.reverse()
    edit = view.begin_edit()
    for r in trailing_white_space:
        view.erase(edit, r)
    view.end_edit(edit)

class TrimTrailingWhiteSpaceCommand(sublime_plugin.TextCommand):
    def run(self, edit):
        trim_trailing_white_space(self.view)

class TrimTrailingWhiteSpace(sublime_plugin.EventListener):
    def on_pre_save(self, view):
        if view.settings().get("trim_trailing_white_space_on_save") == True:
            trim_trailing_white_space(view)

class EnsureNewlineAtEof(sublime_plugin.EventListener):
    def on_pre_save(self, view):
        if view.settings().get("ensure_newline_at_eof_on_save") == True:
            if view.size() > 0 and view.substr(view.size() - 1) != '\n':
                edit = view.begin_edit()
                view.insert(edit, view.size(), "\n")
                view.end_edit(edit)

Agora você pode adicionar o comando à configuração do seu mapa de teclado:

{ "keys": ["your_shortcut"], "command": "trim_trailing_white_space" }
Riccardo Marotti
fonte
A melhor solução para mim, não quero adicionar um plugin apenas para fazer isso. Obrigado.
puro_nervio
Para mim, esta é a solução perfeita, Thx
Vikrame