Sublime Text 2: recorta el espacio en blanco final a pedido

99

Sé que Sublime Text 2 puede eliminar el espacio en blanco final en los archivos al guardarlos.

Cuando se trabaja en equipo y se realiza un cambio en un archivo, esto tiende a producir grandes diferencias que hacen que la revisión del código entre pares sea más engorrosa. Por esa razón, prefiero hacer solo la limpieza de espacios en blanco cuando estoy realizando cambios grandes en un archivo de todos modos y dejar los espacios en blanco como están para los cambios menores.

Me gustaría saber si hay algún comando para ejecutar el recorte del espacio en blanco bajo demanda en un archivo, que no sea "Activate trimming on save > Save file > Deactivate trimming".

La búsqueda en la Documentación y en stackoverflow no mostró nada relevante, todos los enlaces parecen hablar sobre el recorte automático al guardar.

José Luis
fuente
1
Esto no responde directamente a su pregunta, pero puede ayudar si está usando Git para el control de versiones: $ mv .git/hooks/pre-commit.sample .git/hooks/pre-commitlo que obtuve de este blog .
Paul Fioravanti
97
Para otros empleados de Google: la forma no ondemand es agregar esta configuración:"trim_trailing_white_space_on_save": true
Nate Glenn
3
Como mejora para el comentario de @Nate Glenn, tenga en cuenta que recortar los espacios en blanco de Markdown podría causarle problemas, especialmente si recorta el espacio en blanco intencional de otra persona y lo confirma sin darse cuenta. Puede editar Markdown.sublime-settingsy deshabilitar el recorte global al guardar y evitar contratiempos.
tehfoo
IMPORTANTE: Si hay más de 1 línea entre las llaves {}, asegúrese de poner un ',' en la línea anterior o obtendrá un error cuando intente guardar.
slindsey3000
1
"Cuando se trabaja en equipo y se realiza un cambio en un archivo, esto tiende a producir grandes diferencias que hacen que la revisión del código entre pares sea más engorrosa" El problema más profundo aquí es que las confirmaciones con espacios en blanco finales no deberían ingresar al repositorio en primer lugar, idealmente, precisamente porque crea el tipo de manchas sucias a las que alude. Prohibir los espacios en blanco finales en sus estándares de codificación y detectar confirmaciones con espacios en blanco incorrectos en sus ganchos de linter / commit.
Frank Farmer

Respuestas:

71

Cuidado: el uso de este complemento hace que Sublime Text sea significativamente más lento

Utilizo el complemento TrailingSpaces para esto.

Resalte los espacios finales y elimínelos en un instante.

ST2 proporciona una forma de eliminar automáticamente los espacios finales al guardar el archivo. Dependiendo de su configuración, puede ser más útil resaltarlos y / o eliminarlos a mano. ¡Este complemento proporciona precisamente eso!

Uso: haga clic en "Editar / Espacios finales / Eliminar".

Para agregar una combinación de teclas, abra "Preferencias / Combinaciones de teclas - Usuario" y agregue:

{ "keys": ["ctrl+alt+t"], "command": "delete_trailing_spaces" }
Sridhar Katakam
fuente
1
Sí, me gusta esta respuesta, la mejor ... actualización segura + simplemente funciona - gracias
Rob
1
He notado que la función ctrl + F para encontrar palabras se vuelve lenta después de instalar este complemento, así que lo eliminé, ¿puedes decirme si te sucede lo mismo?
dennisbot
Ctrl + Shift + T ya se usa para abrir la última pestaña cerrada en Sublime. Así que prefiero Ctrl + Alt + T
Pawel
5
Hay una opción llamada trailing_spaces_trim_on_save, que puede configurar trueen Preferences > Package Settings > Trailing Spaces > Settings - User. Puede usar esto en lugar de vincular un atajo de teclado, creo que es mejor para mis necesidades
dspacejs
Advertencia: el desplazamiento por archivos grandes se vuelve significativamente más lento con este complemento instalado.
compie el
67

Utilizo estos pasos para una solución rápida bajo demanda dentro de Sublime Text:

  1. Buscar> Reemplazar ...
  2. Encontrar que: [ \t]+\n
  3. Reemplazar con: \n
  4. Reemplaza todo

También puede hacer esto para un gran conjunto de archivos a través de

  1. Buscar> Buscar en archivos ...
  2. Encontrar: [ \t]+\n
  3. Dónde:
  4. Reemplazar: \n
  5. Reemplazar
Jason favorece
fuente
5
Este método funciona para todas las líneas excepto la última.
Joncom
1
@Joncom tiene razón sobre la última línea. En Sublime Text 3, \tno parece coincidir con los espacios, por lo que la respuesta tal como está escrita solo elimina las pestañas finales. Creo que lo prefiero \s+\n, pero tenga en cuenta que también elimina las líneas en blanco. Si desea eliminar los espacios en blanco en la línea final, así se puede añadir \s+\zcomo tal: (\s+\n|\s+\z).
canhascodez
3
([\t ]+\n|\s+\z)<- no elimina las líneas en blanco.
canhascodez
4
La expresión regular correcta debería ser [ \t]+$y reemplazarla con nada.
Codesmith
27

Simplemente puede usar una expresión regular para eliminar los espacios en blanco finales:

  1. Buscar> Reemplazar ...
  2. Encontrar que: [^\S\r\n]+$
  3. Reemplazar con: dejar vacío.
  4. Haga clic en 'Reemplazar todo'

[^\S\r\n]+$es Regex para "al menos un carácter de espacio en blanco (es decir, espacios y tabulaciones, pero no nuevas líneas, usando una doble negación) seguido del final de la línea"

La expresión regular debe estar habilitada: Habilitar regex es diálogo de búsqueda

antou
fuente
22

Aquí hay una forma súper simple que no usa complementos ni configuraciones y funciona en la mayoría de las situaciones.

  1. Realice una selección múltiple y mueva el cursor al final de cada línea
  2. Mantenga presionada la tecla CTRL-Shift, presione izquierda, derecha
  3. Los espacios y tabulaciones al final de las líneas ahora deberían estar seleccionados. Presione Eliminar o Retroceso

    Nota : en este punto, también se pueden seleccionar caracteres especiales como (y + al final de la línea, no solo espacios.

Cómo realizar una selección múltiple de todas las líneas:

Una forma es usar la tecla central del mouse para seleccionar verticalmente y luego presionar la tecla Finalizar si es una selección pequeña.

Con teclas de acceso rápido:

  1. CTRL-A (seleccionar todo)
  2. CTRL-SHIFT-L (colocar el cursor en todas las líneas seleccionadas)
  3. FIN (Ir al final de las líneas)

También puede usar la función de búsqueda para encontrar algo que estará en cada línea, como el carácter de espacio:

  1. \ s (usando expresiones regulares)
  2. Haga clic en Buscar todo
  3. Presione la tecla "Fin" para obtener varios cursores al final de cada línea

Texto de ejemplo:

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
fuente
2
Nota: Para resaltar todas las líneas con el cursor múltiple en la última posición, puede usar CTRL + A seguido de CTRL + MAYÚS + L seguido de FIN.
Richard Marskell - Drackir
2
Usando esta técnica en otros conjuntos de datos, descubrí que no es perfecta. Sublime Text también resaltará caracteres especiales como) y + junto con espacios finales. Tenga cuidado si algunos de los datos terminan en caracteres especiales.
shanemgrey
2
Además, FYI \sen regex no solo coincide con el carácter de espacio, sino también con tabulaciones y nuevas líneas (es decir, "espacios en blanco") no solo con espacios. :)
Richard Marskell - Drackir
13

Encontré una solución aquí: http://www.sublimetext.com/forum/viewtopic.php?f=4&t=4958

Puedes modificar el paquete

trim_trailing_white_space.py

ubicado en el directorio de paquetes predeterminado, de esta manera:

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)

Ahora puede agregar el comando a la configuración de su mapa de teclas:

{ "keys": ["your_shortcut"], "command": "trim_trailing_white_space" }
Riccardo Marotti
fuente
La mejor solución para mí, no quiero agregar un complemento simplemente para hacer esto. Gracias.
puro_nervio
Para mí, esta es la solución perfecta, Thx
Vikrame