¿Cómo arreglar / convertir sangría de espacio en Sublime Text?


228

Ejemplo: si tengo un documento con sangría de 2 espacios y quiero que tenga una sangría de 4 espacios, ¿cómo lo convierto automáticamente mediante el editor de texto sublime?

Respuestas:


525

Aquí hay un buen truco en Sublime Text 2 o 3 para convertir su espacio de sangría en un documento.

TL; DR:

Conversión de 2 espacios a 4 espacios:

Asegúrese de que el ancho de la pestaña esté configurado en 2. Convierta su sangría de 2 espacios en pestañas, cambie al ancho de la pestaña 4 y luego convierta la sangría nuevamente en espacios.

La descripción detallada:

Ir:

View -> Indentation

Debería leer:

  • Indent using spaces [x]
  • Tab width: 2

Seleccione:

  • Convert Indentation to Tabs

Luego seleccione:

  • Tab width: 4
  • Convert Indentation to Spaces

Hecho.


55
¡Gracias! : D Ahorró mucho tiempo. Nota. También puede hacer "find: space-space => select all => tab"
Automático

11
Creé una Macro para sublime que hace todo esto por ti gist.github.com/joshmfrankel/5707020 . Disfruta :-)
Josh Frankel

2
Quiero señalar que la "Convertir sangría a espacios" también funciona si tiene un archivo de texto donde las pestañas no ocupan todo el ancho de la pestaña. Digamos, para un archivo donde el autor usaba pestañas para formatear columnas, por lo que si hiciera una búsqueda y reemplazo en las pestañas, las columnas resultantes ya no estarían alineadas. Sin embargo
Joe Pinsonault

También creé macros y ejemplos de combinaciones de teclas para esto para un compañero de trabajo antes de ver la macro de Josh. El mío usa ctrl + 2 y ctrl + 4 para permitir el cambio de ida y vuelta: gist.github.com/beaugunderson/8588871
Beau

74

De hecho, descubrí que es mejor para mi cordura tener preferencias de usuario que se definan así:

"translate_tabs_to_spaces": true,
"tab_size": 2,
"indent_to_bracket": true,
"detect_indentation": false

Esto detect_indentation: falsees especialmente importante, ya que obliga a Sublime a respetar estas configuraciones en cada archivo, en lugar de las View -> Indentationconfiguraciones.

Si quieres ponerte elegante, también puedes definir un atajo de teclado para volver a sangrar automáticamente tu código (YMMV) pegando lo siguiente en Sublime -> Preferences -> Key Binding - User:

[
  { "keys": ["ctrl+i"], "command": "reindent" }
]

y para visualizar el espacio en blanco:

"indent_guide_options": ["draw_active"],
"trim_trailing_white_space_on_save": true,
"ensure_newline_at_eof_on_save": true,
"draw_white_space": "all",
"rulers": [120],

9

En mi opinión, encontré una solución más simple que Magne:

En mac:

"cmd+f" => "  "(two spaces) => "alt+enter" => "arrow right" => "  "(two more spaces) => set tab width to 4(this can be done before or after.

En las ventanas u otras plataformas de cambio cmd+fy alt+entercon lo que sus findy select allteclas de acceso rápido son.

Nota: este método es propenso a "errores" si tiene más de un espacio dentro de su código. Por lo tanto, es menos seguro que el método de Magne, pero es más rápido (al menos para mí).


No pude hacer que esto funcionara como tal, pero utilicé el principio y solo hice una búsqueda y reemplazo (cmd-option-F en Mac) y reemplacé "" (4 espacios) con "" (2 espacios). ¡Y funcionó!
Evanbikes

He encontrado otra forma de hacer esto ahora, pero es específico del idioma. Si tiene un complemento de formato como el RubyFormat, simplemente puede establecer el tamaño de pestaña deseado y luego reformatear el código. En el caso de RubyFormatque sería cmd+shift+R.
Automático

7

Si bien muchas de las sugerencias funcionan al convertir 2 -> 4 espacios. Me encontré con algunos problemas al convertir 4 -> 2.

Esto es lo que terminé usando:

Sublime Text 3/Packages/User/to-2.sublime-macro

[
  { "args": null, "command": "select_all" },
  { "args": { "set_translate_tabs": true }, "command": "unexpand_tabs" },
  { "args": { "setting": "tab_size", "value": 1 }, "command": "set_setting" },
  { "args": { "set_translate_tabs": true }, "command": "expand_tabs" },
  { "args": { "setting": "tab_size", "value": 2 }, "command": "set_setting" }
]

5

Si encuentra la búsqueda y el reemplazo más rápido de usar, podría usar un reemplazo de expresiones regulares como este:

Find (regex): (^|\G) {2}(En lugar de "{2}" <space>{2} puedes escribir dos espacios. Lo usaste aquí para mayor claridad).

Reemplace con 4 espacios, o lo que quiera, como \t.


5

Escribí un complemento para ello. Puede encontrarlo aquí o buscar "ReIndent" en el control de paquetes. En su mayoría, hace lo mismo que escribió Kyle Finley, pero de manera conveniente con atajos para convertir entre 2 y 4 y viceversa.


2

Debe agregar este código a sus asociaciones de teclas personalizadas:

{ "keys": ["ctrl+f12"], "command": "set_setting", "args": {"setting": "tab_size", "value": 4} }

presionando ctrl + f12, reinventará su archivo a un tamaño de pestaña de 4. si desea un tamaño de pestaña diferente, simplemente cambie el número de "valor". El formato es un simple json.


Me gusta gracias! { "keys": ["ctrl+f10"], "command": "set_setting", "args": {"setting": "translate_tabs_to_spaces", "value": 2} }, { "keys": ["ctrl+f11"], "command": "set_setting", "args": {"setting": "tab_size", "value": 2} }, { "keys": ["ctrl+f12"], "command": "set_setting", "args": {"setting": "tab_size", "value": 4} },
Agregué

0

Lo más fácil que hice fue

cambié mi sangría a pestañas

Y resolvió mi problema.

Puedes hacer lo mismo,

a espacios

así como por su necesidad

Mencionó la instantánea de la misma.

ingrese la descripción de la imagen aquí


Sí, pero la pregunta es la situación en la que ambos comienzan y terminan con sangría como espacios.
Magne

0

Recientemente me enfrenté a un problema similar. Estaba usando el editor sublime. No es un problema con el código sino con el editor.

A continuación, el cambio en la configuración de preferencias funcionó para mí.

Menú Sublime Text -> Preferencias -> Configuración: Específico de sintaxis :

{
    "tab_size": 4,
    "translate_tabs_to_spaces": true
}
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.