Sublime Text 3, konvertieren Sie Leerzeichen in Tabulatoren


192

Ich weiß, dass es viele Beiträge dazu gibt, aber ich konnte es nicht zum Laufen bringen.
Ich benutze Tabs zum Codieren. Gibt es eine Möglichkeit, Leerzeichen immer in Tabulatoren umzuwandeln? Dh beim Öffnen und beim Speichern von Dateien? Hat jemand eine Idee?

// edit:
Mein Wunsch ist es das automatisch zu machen ! -> öffnen, speichern oder im laufenden Betrieb
Weiß jemand, wie es geht?


Ich habe versucht , dies :

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

Und hier sind meine Benutzereinstellungen:

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

Das Plugin, das Sie gepostet haben, funktioniert für mich auf ST3, Build 3059, einwandfrei. Können Sie die Konsole mit öffnen Ctrl + ~und sehen, ob es Plugin-Fehler gibt? Und wenn Sie Package Control installiert haben, können Sie sehen, ob ExpandTabsOnSavees als installiertes Plugin aufgeführt ist?
Angerson

Verrückte, scheint ( siehe Liste unter Liste Pakete) installiert werden und in der Konsole kann ich nicht alle Fehler finden :-(
chris

Versuchen Sie print("debug"), dem Plugin ein ähnliches oder ähnliches Plugin hinzuzufügen, um festzustellen, ob es ausgeführt wird oder nicht.
Angerson

omg, seine Werke! war das falsche Verzeichnis auf Windows-Computer, Pakete sind in Benutzer /.../ AppData / Roaming / SublimeText3 / Pakete aufgeführt Vielen Dank!
Chris

Stellen Sie sicher, dass Sie diese Ansicht als aktive Ansicht für das Fenster festlegen, bevor Sie den Befehl ausführen. Möglicherweise nicht sehr wahrscheinlich, aber wenn Sie es veröffentlicht haben, werden möglicherweise die Registerkarten einer anderen Seite als der Seite, die Sie speichern möchten, erweitert. Selbst mit der Fokusansicht besteht die Möglichkeit, dass sie in einer falschen Datei gespeichert wird, aber zumindest können Sie das Risiko minimieren.
Skuroda

Antworten:


376

In der unteren rechten Ecke Ihres Sublime Text-Fensters sehen Sie eine Einrückungsanzeige, die ungefähr so ​​aussieht:

Menü Einrückungsoptionen

Wenn Sie darauf klicken, wird ein Menü mit Optionen zum Anpassen Ihrer Einrückungseinstellungen geöffnet Convert Indentation to Tabs/Spaces.

Geben Sie hier die Bildbeschreibung ein

Das gleiche Menü ist unter aufgeführt View -> Indentation.


42
Ja, ich weiß. Mein Wunsch ist es, dies automatisch zu machen ... irgendeine Idee?
chris

2
@chris ツ Ah. Könnten Sie Ihre Frage neu formatieren, um dies deutlicher zu machen? Ich habe deine Bedeutung verpasst, also könnten es auch andere tun.
Angerson

Ich habe diese Statusleiste unten nicht - wie bekomme ich sie?
Geoidesic

1
Dies gilt für die gesamte Datei und kann nicht nur für eine Auswahl durchgeführt werden.
not2qubit

Sehr schön. Ich habe auch 'command-a' gemacht, um alle auszuwählen, 'command- [', um den Einzug aufzuheben, und dann 'edit> line> reindent', um die Datei zu reparieren. Ich bin sicher, dass dies in ein Makro eingebaut werden kann.
Brooks DuBois

130

Am unteren Rand des Sublime-Fensters sehen Sie etwas, das Ihre Tab / Space-Einstellung darstellt.

Sie erhalten dann eine Dropdown-Liste mit einer Reihe von Optionen. Die Optionen, die Sie interessieren, sind:

  • Einrückung in Leerzeichen konvertieren
  • Einrückung in Tabulatoren konvertieren

Wenden Sie die gewünschte Einstellung auf das gesamte Dokument an.

Hoffe das hilft.


2
Ich wünschte, dies könnte beim Laden und automatisch erfolgen ... für alle Dateien, die ich öffne. Ich meine: die Umwandlung von Einrückungsräumen in Tabulatoren. Es würde automatisch unter Last ausgeführt werden :-)
Filip OvertoneSinger Rydlo

1
Ich höre dich dazu. Ich bevorzuge Tabulatoren, ABER ich verstehe, warum viel Code mit Leerzeichen geschrieben wird. Bei Leerzeichen gibt es keine Inkonsistenzen zwischen IDEs - ein Leerzeichen ist ein Leerzeichen ist ein Leerzeichen. Tabulatoren können eine variable Anzahl von Leerzeichen zwischen IDEs einnehmen und den Code seltsam aussehen lassen.
Erier

Hallo @Green - was funktioniert daran nicht? Lassen Sie uns das
klären

80

Wie Sie vielleicht bereits wissen, können Sie Ihre Einrückungseinstellungen anpassen Preferences.sublime-settings, zum Beispiel in:

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

Dadurch wird Ihr Editor so eingestellt, dass Registerkarten mit einer Breite von 4 Leerzeichen verwendet werden, und das Standardverhalten wird überschrieben, durch das Sublime mit dem Einzug der von Ihnen bearbeiteten Datei übereinstimmt. Wenn Sie die Datei mit diesen Einstellungen erneut einrücken, werden alle Leerzeichen durch Tabulatoren ersetzt.

Das automatische erneute Einrücken beim Öffnen einer Datei ist nicht ganz so einfach (aber wahrscheinlich keine gute Idee, da Änderungen an Leerzeichen die Dateiunterschiede zerstören). Was könnte eine bessere Vorgehensweise sein: Sie können eine Verknüpfung für die erneute Einrückung zuordnen und diese einfach auslösen, wenn Sie eine neue Datei öffnen, die repariert werden muss.


13

Sie können die Befehlspalette verwenden, um dieses Problem zu beheben.

Schritt 1: Ctrl + Shift + P(um die Befehlspalette zu aktivieren)

Schritt 2: Geben Sie "Einzug" ein und wählen Sie "Indentation: Convert to Tabs"


1
Ausgezeichnet. Danke dir.
RJ

Beste Lösung. Vielen Dank!
Matthew K

7

In meinem Fall hat diese Zeile das Problem gelöst:

"translate_tabs_to_spaces": false

4

Hier ist eine Lösung, die beim Öffnen einer Datei automatisch in Registerkarten konvertiert wird.

Erstellen Sie diese Datei: .../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")

HINWEIS. Dies führt dazu, dass sich die Datei nach dem Öffnen in einem nicht gespeicherten Zustand befindet, auch wenn keine tatsächliche Konvertierung von Speicherplatz in Tabulator stattgefunden hat. Vielleicht können einige bei der Behebung dieses Problems helfen.


Ich denke du .../Packages/User/on_file_load.py.php
meintest

@PranavNutalapati Danke, dass du das verstanden hast.
TheStoryCoder

Ja sicher. Kein Problem.
Pranav Nutalapati

versuche on_loadstatt on_load_async.
Pedro Góes

3

Fügen Sie das folgende Python-Skript zu einem neu erstellten Unterordner mit dem Namen "UnexpandTabsOnSave" in "$ SUBLIME_HOME $ \ Packages \" hinzu, um Leerzeichen beim Speichern automatisch in Registerkarten zu konvertieren :

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

Vielen Dank für die erste Ressource.


0

Sie können Tabulatoren durch Leerzeichen in allen Projektdateien ersetzen durch:

  1. Ersetzen Sie alle Ctrl+Shif+F
  2. Stellen Sie die Regex-Suche ein ^\A(.*)$
  3. Verzeichnis auf setzen Your dir
  4. Ersetzt durch \1

    Geben Sie hier die Bildbeschreibung ein

  5. Dadurch werden alle Projektdateien geöffnet, deren Puffer als verschmutzt markiert ist. Mit dieser Option können Sie jetzt optional diese nächsten Sublime Text-Einstellungen aktivieren, um alle Dateien nach dem Leerzeichen zu kürzen und am Ende jeder Datei eine neue Zeile zu erstellen.

    Sie können diese Einstellungen aktivieren, indem Sie im Menü Preferences -> Settingsdiese Inhalte zu Ihrer Einstellungsdatei hinzufügen:

    1. "ensure_newline_at_eof_on_save": true,
    2. "trim_trailing_white_space_on_save": true,
  6. Öffnen Sie die Sublime Text-Konsole, indem Sie das Menü aufrufen View -> Show Console (Ctrl+`)und den folgenden Befehl ausführen: 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. Speichern Sie nun alle geänderten Dateien, indem Sie zum Menü gehen File -> Save All

0

Wenn Sie einen Mac haben, verwenden Sie einfach die Hilfeoption (normalerweise die letzte Option in der Menüleiste des Mac). Geben Sie dann "Tabulatoreinzug" ein und wählen Sie eine Breite für den Tabulatoreinzug

Im Allgemeinen können Sie jedoch diesem Pfad folgen: Ansicht -> Einrückung


0

Verwenden Sie den folgenden Befehl, um das Problem zu lösen:

autopep8 -i <filename>.py

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.