Sublime Text 3, convierte espacios en pestañas


192

Sé que hay muchas publicaciones sobre esto, pero no pude hacerlo funcionar.
Yo uso pestañas para la codificación. ¿Hay alguna manera de convertir siempre espacios en pestañas? Es decir, en abrir y en Guardar archivos? Alguien tiene una idea?

// edit: ¡
Mi deseo es hacer esto automáticamente ! -> abrir, guardar o sobre la marcha
¿Alguien sabe cómo hacerlo?


Intenté esto :

import sublime, sublime_plugin, os

class ExpandTabsOnSave(sublime_plugin.EventListener):
  # Run ST's 'expand_tabs' command when saving a file
  def on_pre_save(self, view):
    if view.settings().get('expand_tabs_on_save') == 1:
      view.window().run_command('expand_tabs')

Y aquí están mis configuraciones de usuario:

{
    "auto_complete_selector": "source - comment, meta.tag - punctuation.definition.tag.begin",
    "auto_indent": true,
    "detect_indentation": true,
    "draw_white_space": "all",
    "ensure_newline_at_eof_on_save": true,
    "expand_tabs_on_save": true,
    "font_face": "SourceCodePro-Regular",
    "font_size": 10,
    "format_on_save": true,
    "ignored_packages":
    [
        "Vintage"
    ],
    "indent_to_bracket": true,
    "open_files_in_new_window": false,
    "smart_indent": true,
    "tab_size": 4,
    "translate_tabs_to_spaces": false,
    "trim_automatic_white_space": true,
    "trim_trailing_white_space_on_save": true,
    "use_tab_stops": false,
    "word_wrap": false
}

El complemento que publicaste realmente funciona bien para mí en ST3, compilación 3059. ¿Puedes abrir la consola Ctrl + ~y ver si te está dando algún error de complemento? Y si tiene instalado Package Control, ¿puede ver si ExpandTabsOnSaveaparece como un complemento instalado?
Angerson

loco, parece estar instalado (enumerado en la lista de paquetes) y en la consola no puedo encontrar ningún error :-(
chris

Intente agregar print("debug")o similar al complemento para ver si se está ejecutando o no al guardar.
Angerson

Dios mío, ¡funciona! era el directorio incorrecto en la máquina de Windows, los paquetes se enumeran en el usuario /.../ AppData / Roaming / SublimeText3 / Paquetes ¡Muchas gracias!
Chris

Asegúrese de establecer esa vista como la vista activa de la ventana antes de ejecutar el comando. Puede que no sea muy probable, pero a medida que lo publicas, es posible que expanda las pestañas de una página diferente a la que estás tratando de guardar. Incluso con la vista de enfoque, supongo que existe la posibilidad de que pueda guardar en un archivo incorrecto, pero al menos puede minimizar el riesgo.
skuroda

Respuestas:


377

En la esquina inferior derecha de su ventana de Sublime Text, verá un indicador de sangría que se parece mucho a esto:

Menú de opciones de sangría

Al hacer clic se abrirá un menú con opciones para ajustar sus preferencias de sangría y, lo que es más importante Convert Indentation to Tabs/Spaces,.

ingrese la descripción de la imagen aquí

El mismo menú aparece debajo View -> Indentation.


42
Sí, lo sé. Mi deseo es hacer esto automáticamente ... ¿alguna idea?
Chris

2
@chris ツ Ah. ¿Podría reformatear su pregunta para hacerla más explícitamente obvia? Extrañé tu significado, por lo que otros también podrían hacerlo.
angerson

No tengo esa barra de estado en la parte inferior, ¿cómo la obtengo?
geodésico

1
Y esto lo hace en todo el archivo, y no se puede hacer solo en una selección.
not2qubit

Muy agradable. También hice 'command-a' para seleccionar todo, 'command- [' para desangrar, luego 'edit> line> reindent' para arreglar el archivo. Estoy seguro de que esto se puede construir en una macro.
Brooks DuBois

130

En la parte inferior de la ventana Sublime, verás algo que representa la configuración de tu pestaña / espacio.

Luego obtendrás un menú desplegable con un montón de opciones. Las opciones que le interesan son:

  • Convertir sangría en espacios
  • Convertir sangría en pestañas

Aplique la configuración deseada a todo el documento.

Espero que esto ayude.


2
Desearía que esto se pudiera hacer en carga y automáticamente ... para todos los archivos que abro. Quiero decir: la conversión de espacios de sangría en pestañas. Se ejecutará automáticamente en carga :-)
Filip OvertoneSinger Rydlo

1
Te escucho sobre eso. Prefiero las pestañas PERO entiendo por qué se escribe mucho código con espacios. Con los espacios, no habrá inconsistencias entre los IDE: un espacio es un espacio es un espacio. Las pestañas pueden ocupar un número variable de espacios entre los IDE y hacer que el código se vea extraño.
erier

Hola @Green: ¿qué no funciona al respecto? Vamos a resolver esto ...
erier

80

Como ya sabrás, puedes personalizar tu configuración de sangría en Preferences.sublime-settings, por ejemplo:

"detect_indentation": true,
"tab_size": 4,
"translate_tabs_to_spaces": false

Esto configurará su editor para usar pestañas que tienen 4 espacios de ancho y anulará el comportamiento predeterminado que hace que Sublime coincida con la sangría de cualquier archivo que esté editando. Con esta configuración, volver a sangrar el archivo hará que los espacios se reemplacen con pestañas.

En cuanto a la sangría automática al abrir un archivo, eso no es tan fácil (pero probablemente no es una gran idea ya que los cambios en el espacio en blanco causan estragos en las diferencias de archivo). Lo que podría ser un mejor curso de acción: puede asignar un acceso directo para volver a aplicar sangría y simplemente activarlo cuando abre un nuevo archivo que necesita corrección.


13

Puede usar la paleta de comandos para resolver este problema.

Paso 1: Ctrl + Shift + P(para activar la paleta de comandos)

Paso 2: Escribe "Sangría", elige "Indentation: Convert to Tabs"


1
Excelente. Gracias.
RJ

Mejor solución. ¡Gracias!
Matthew K

7

En mi caso, esta línea resolvió el problema:

"translate_tabs_to_spaces": false

4

Aquí hay una solución que se convertirá automáticamente en pestañas cada vez que abra un archivo.

Crea este archivo .../Packages/User/on_file_load.py:

import sublime
import sublime_plugin

class OnFileLoadEventListener(sublime_plugin.EventListener):

    def on_load_async(self, view):
        view.run_command("unexpand_tabs")

NOTA. Hace que el archivo esté en un estado no guardado después de abrirlo, incluso si no se realizó una conversión real de espacio a pestaña ... tal vez algunos puedan ayudar con una solución para eso ...


Creo que quisiste decir .../Packages/User/on_file_load.py, no.php
Pranav Nutalapati

@PranavNutalapati Gracias por atrapar eso.
TheStoryCoder

Si seguro. No hay problema.
Pranav Nutalapati

intente en on_loadlugar de on_load_async.
Pedro Góes

3

Para convertir automáticamente espacios en pestañas al guardar , agregue el siguiente script de Python a una subcarpeta recién creada llamada "UnexpandTabsOnSave" dentro de "$ SUBLIME_HOME $ \ Packages \":

import sublime, sublime_plugin, os

class ConvertSpacesToTabsOnSave( sublime_plugin.EventListener ):
  # Run Sublime's 'unexpand_tabs' command when saving any file
  def on_pre_save( self, view ):
    view.window().run_command( 'unexpand_tabs' )

Gracias por el recurso inicial.


0

Puede reemplazar las pestañas con espacios en todos los archivos del proyecto:

  1. Hacer un Reemplazar todo Ctrl+Shif+F
  2. Establecer búsqueda de expresiones regulares ^\A(.*)$
  3. Establecer directorio en Your dir
  4. Sustituir por \1

    ingrese la descripción de la imagen aquí

  5. Esto hará que todos los archivos del proyecto se abran, con su búfer marcado como sucio. Con esto, ahora puede habilitar opcionalmente estas próximas configuraciones de Sublime Text, para recortar todos los archivos detrás del espacio en blanco y asegurar una nueva línea al final de cada archivo.

    Puede habilitar esta configuración yendo al menú Preferences -> Settingsy agregando estos contenidos a su archivo de configuración:

    1. "ensure_newline_at_eof_on_save": true,
    2. "trim_trailing_white_space_on_save": true,
  6. Abra la consola de Sublime Text, vaya al menú View -> Show Console (Ctrl+`)y ejecute el comando: import threading; threading.Thread( args=(set(),), target=lambda counterset: [ (view.run_command( "expand_tabs", {"set_translate_tabs": True} ), print( "Processing {:>5} view of {:>5}, view id {} {}".format( len( counterset ) + 1, len( window.views() ), view.id(), ( "Finished converting!" if len( counterset ) > len( window.views() ) - 2 else "" ) ) ), counterset.add( len( counterset ) ) ) for view in window.views() ] ).start()
  7. Ahora, guarde todos los archivos modificados yendo al menú File -> Save All

0

si tienes Mac, solo usa la opción de ayuda (generalmente la última opción en la barra de menú de Mac), luego escribe: "sangría de pestaña" y elige un ancho de sangría de pestaña

pero en general, puede seguir este camino: ver -> sangría



Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.