Sublime Text 3, converti gli spazi in schede


192

So che ci sono molti post su questo, ma non sono riuscito a farlo funzionare.
Uso le schede per la codifica. C'è un modo, per convertire sempre gli spazi in schede? Vale a dire su aperto e su Salva file? Qualcuno ha un'idea?

// modifica: il
mio desiderio è di farlo automaticamente ! -> apri, salva o al volo
Qualcuno sa come fare?


Ho provato questo :

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')

Ed ecco le mie impostazioni utente:

{
    "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
}

Il plug-in che hai pubblicato funziona davvero bene per me su ST3, build 3059. Puoi aprire la console Ctrl + ~e vedere se ti dà errori di plug-in? E se hai installato Package Control, puoi vedere se ExpandTabsOnSaveè elencato come plugin installato?
Angerson,

Pazzo, sembra essere installato (elencato sotto i pacchetti elenco) e nella console non riesco a trovare alcun errore :-(
chris

Prova ad aggiungere print("debug")o simile al plug-in per vedere se è in esecuzione o meno durante il salvataggio.
Angerson,

Oh mio Dio, funziona! era la directory sbagliata sul computer Windows, i pacchetti sono elencati nell'utente /.../ AppData / Roaming / SublimeText3 / Packages Grazie mille!
chris

Assicurarsi di impostare quella vista come vista attiva per la finestra prima di eseguire il comando. Potrebbe non essere molto probabile, ma quando lo hai pubblicato, è possibile che espanda le schede di una pagina diversa da quella che stai tentando di salvare. Anche con la vista di messa a fuoco, suppongo che ci sia una possibilità che si possa salvare in un file sbagliato, ma almeno è possibile ridurre al minimo il rischio.
skuroda,

Risposte:


378

Nell'angolo in basso a destra della finestra Sublime Text, vedrai un indicatore di rientro che assomiglia molto a questo:

Menu delle opzioni di rientro

Cliccando si aprirà un menu con le opzioni per regolare le preferenze di rientro, e, soprattutto, Convert Indentation to Tabs/Spaces.

inserisci qui la descrizione dell'immagine

Lo stesso menu è elencato sotto View -> Indentation.


42
si, lo so. Il mio desiderio è di farlo automaticamente ... qualche idea?
chris

2
@chris ツ Ah. Potresti riformattare la tua domanda per renderlo più esplicitamente ovvio? Mi mancava il tuo significato, quindi anche altri potrebbero.
Angerson,

Non ho quella barra di stato in fondo - come la ottengo?
geoidesic,

1
E questo fa sull'intero file e non può essere fatto solo su una selezione.
not2qubit

Molto bella. Ho anche fatto 'command-a' per selezionare tutto, 'command- [' per rimuovere il rientro, quindi 'edit> line> reindent' per correggere il file. Sono sicuro che questo può essere integrato in una macro.
Brooks DuBois,

130

Nella parte inferiore della finestra Sublime, vedrai qualcosa che rappresenta la tua impostazione tab / spazio.

Avrai quindi un menu a discesa con un sacco di opzioni. Le opzioni che ti interessano sono:

  • Converti rientro in spazi
  • Converti rientro in schede

Applica l'impostazione desiderata all'intero documento.

Spero che questo ti aiuti.


2
Vorrei che questo potesse essere fatto al caricamento e automaticamente ... per tutti i file che apro. Voglio dire: la conversione degli spazi di rientro in schede.
Verrà

1
Ti ho sentito. Preferisco le schede MA capisco perché un sacco di codice è scritto con spazi. Con gli spazi, non ci saranno incoerenze tra gli IDE: uno spazio è uno spazio è uno spazio. Le schede possono occupare un numero variabile di spazi tra gli IDE e rendere strano il codice.
erier

Ciao @Verde - cosa non funziona al riguardo?
Risolviamolo

80

Come forse già saprai, puoi personalizzare le tue impostazioni di rientro Preferences.sublime-settings, ad esempio:

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

Questo imposterà il tuo editor a utilizzare schede di 4 spazi e sovrascriverà il comportamento predefinito che fa sì che Sublime corrisponda al rientro di qualsiasi file che stai modificando. Con queste impostazioni, il rientro del file provocherà la sostituzione di eventuali spazi con le schede.

Per quanto riguarda il rientro automatico all'apertura di un file, non è così facile (ma probabilmente non è una grande idea poiché i cambiamenti di spazio causano il caos sulle differenze dei file). Quale potrebbe essere una migliore linea d'azione: puoi mappare un collegamento per la reindirizzamento e attivarlo quando apri un nuovo file che deve essere riparato.


13

È possibile utilizzare la tavolozza dei comandi per risolvere questo problema.

Passaggio 1: Ctrl + Shift + P(per attivare la tavolozza dei comandi)

Passaggio 2: digitare "Rientro", scegliere "Indentation: Convert to Tabs"


1
Eccellente. Grazie.
RJ,

Soluzione migliore. Grazie!
Matthew K,

7

Nel mio caso, questa riga ha risolto il problema:

"translate_tabs_to_spaces": false

4

Ecco una soluzione che convertirà automaticamente in schede ogni volta che apri un file.

Crea questo file .../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. Fa sì che il file sia in uno stato non salvato dopo averlo aperto, anche se non è avvenuta alcuna conversione spazio-scheda effettiva ... forse alcuni possono aiutare con una correzione per quello ...


Penso che volevi dire .../Packages/User/on_file_load.py, non.php
Pranav Nutalapati

@PranavNutalapati Grazie per averlo colto.
TheStoryCoder il

Si certo. Nessun problema.
Pranav Nutalapati,

prova on_loadinvece di on_load_async.
Pedro Góes,

3

Per convertire automaticamente gli spazi in schede al momento del salvataggio , aggiungi il seguente script Python a una sottocartella appena creata chiamata "UnexpandTabsOnSave" in "$ 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' )

Grazie per la risorsa iniziale.


0

Puoi sostituire le schede con spazi in tutti i file di progetto:

  1. Fare un Sostituisci tutto Ctrl+Shif+F
  2. Imposta la ricerca regex ^\A(.*)$
  3. Imposta directory su Your dir
  4. Sostituito da \1

    inserisci qui la descrizione dell'immagine

  5. Ciò causerà l'apertura di tutti i file di progetto, con il loro buffer contrassegnato come sporco. Con questo, ora puoi abilitare facoltativamente queste prossime impostazioni di Sublime Text, per tagliare tutti i file che trascorrono spazi vuoti e garantire una nuova riga alla fine di ogni file.

    Puoi abilitare queste impostazioni andando nel menu Preferences -> Settingse aggiungendo questi contenuti al tuo file delle impostazioni:

    1. "ensure_newline_at_eof_on_save": true,
    2. "trim_trailing_white_space_on_save": true,
  6. Apri la console di Sublime Text, andando nel menu View -> Show Console (Ctrl+`)ed esegui il 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. Ora, salva tutti i file modificati accedendo al menu File -> Save All

0

se hai un Mac usa solo l'opzione di aiuto (di solito l'ultima opzione sulla barra dei menu del Mac) quindi digita: "rientro delle schede" e scegli una larghezza di rientro delle schede

ma in genere puoi seguire questo percorso: view -> indentation


0

Utilizzare il seguente comando per risolverlo:

autopep8 -i <filename>.py

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.