Wie kann ich Leerzeicheneinrückungen in Sublime Text korrigieren / konvertieren?

228

Beispiel: Wenn ich ein Dokument mit 2 Leerzeicheneinrückungen habe und 4 Leerzeicheneinrückungen haben möchte, wie konvertiere ich es automatisch mithilfe des Sublime Text-Editors?

Magne
quelle

Antworten:

525

Hier ist ein guter Trick in Sublime Text 2 oder 3, um Ihren Einrückungsabstand in ein Dokument zu konvertieren.

TL; DR:

Konvertieren von 2 Feldern in 4 Felder:

Stellen Sie sicher, dass die Tabulatorbreite auf 2 eingestellt ist. Konvertieren Sie Ihren Einzug mit zwei Leerzeichen in Tabulatoren, wechseln Sie zu Tabulatorbreite 4 und konvertieren Sie den Einzug zurück in Leerzeichen.

Die detaillierte Beschreibung:

Gehe zu:

View -> Indentation

Es sollte lauten:

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

Wählen:

  • Convert Indentation to Tabs

Wählen Sie dann:

  • Tab width: 4
  • Convert Indentation to Spaces

Getan.

Magne
quelle
5
Danke dir! : D Viel Zeit gespart. Hinweis. Sie können auch "find: space-space => select all => tab"
Automatico
11
Ich habe ein Makro für Erhabene erstellt, das all dies für Sie erledigt . Gist.github.com/joshmfrankel/5707020 . Viel Spaß :-)
Josh Frankel
2
Ich möchte darauf hinweisen, dass die Option "Einrückung in Leerzeichen konvertieren" auch funktioniert, wenn Sie eine Textdatei haben, in der die Registerkarten nicht die gesamte Registerkartenbreite einnehmen. Angenommen, für eine Datei, in der der Autor Registerkarten zum Formatieren von Spalten verwendet hat. Wenn Sie also die Registerkarten suchen und ersetzen, werden die resultierenden Spalten nicht mehr in einer Reihe angezeigt. Wenn Sie "Einrückung in Leerzeichen konvertieren" verwenden, bleibt die
Ausrichtung
Ich habe auch Makros und Beispiel-Tastenkombinationen für einen Mitarbeiter erstellt, bevor ich Joshs Makro sah. Meins verwendet Strg + 2 und Strg + 4, um das Hin- und Herwechseln zu ermöglichen: gist.github.com/beaugunderson/8588871
Beau
74

Ich fand es tatsächlich besser für meine Vernunft, Benutzereinstellungen so zu definieren:

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

Das detect_indentation: falseist besonders wichtig, da es Sublime zwingt diese Einstellungen in jeder Datei zu ehren, wie zu den gegenüberliegenden View -> IndentationEinstellungen.

Wenn Sie Lust haben, können Sie auch eine Tastenkombination definieren, um Ihren Code (YMMV) automatisch neu einzurücken, indem Sie Folgendes einfügen Sublime -> Preferences -> Key Binding - User:

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

und um das Leerzeichen zu visualisieren:

"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],
Brian Gerstle
quelle
9

Ich fand in meinem Kopf eine einfachere Lösung als Magne:

Auf dem Mac:

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

Auf Windows oder anderen Plattformen ändern cmd+fund alt+entermit was auch immer Ihre findund select allHotkeys sind.

Hinweis: Diese Methode ist anfällig für "Fehler", wenn Sie mehr als ein Leerzeichen in Ihrem Code haben. Es ist daher weniger sicher als Magnes Methode, aber es ist schneller (zumindest für mich).

Automatico
quelle
Ich konnte dies nicht als solches zum Laufen bringen, aber ich habe das Prinzip verwendet und nur ein Suchen und Ersetzen (cmd-Option-F auf Mac) durchgeführt und "" (4 Leerzeichen) durch "" (2 Leerzeichen) ersetzt. Und es hat funktioniert!
Evansbikes
Ich habe jetzt einen anderen Weg gefunden, aber es ist sprachspezifisch. Wenn Sie ein Formatierungs-Plugin wie das haben RubyFormat, können Sie einfach die gewünschte Registerkartengröße einstellen und dann den Code neu formatieren. Im Falle RubyFormatwäre es cmd+shift+R.
Automatico
7

Während viele der Vorschläge beim Konvertieren von 2 -> 4 Leerzeichen funktionieren. Beim Konvertieren von 4 -> 2 sind einige Probleme aufgetreten.

Folgendes habe ich letztendlich verwendet:

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" }
]
Kyle Finley
quelle
5

Wenn Sie das Suchen und Ersetzen schneller finden, können Sie einen Regex-Ersatz wie folgt verwenden:

Suchen (regulärer Ausdruck): (^|\G) {2}(Anstelle von "{2}" können <space>{2} Sie auch zwei Leerzeichen schreiben. Wird hier zur Verdeutlichung verwendet.)

Ersetzen Sie durch 4 Leerzeichen oder was auch immer Sie möchten \t.

Qtax
quelle
5

Ich habe ein Plugin dafür geschrieben. Sie finden es hier oder suchen in der Paketsteuerung nach "ReIndent". Es macht meistens das Gleiche wie Kyle Finley, aber auf bequeme Weise mit Verknüpfungen zum Konvertieren zwischen 2 und 4 und umgekehrt.

kamilkp
quelle
2

Sie müssen diesen Code zu Ihren benutzerdefinierten Tastenkombinationen hinzufügen:

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

Durch Drücken von Strg + F12 wird Ihre Datei erneut auf eine Tabulatorgröße von 4 eingestellt. Wenn Sie eine andere Tabulatorgröße wünschen, ändern Sie einfach die "Wert" -Nummer. Das Format ist ein einfacher JSON.

patricia bezek
quelle
Ich mag es danke! Ich fügte 2 und 4 wie { "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} },
folgt
0

Das Einfachste, was ich getan habe, war:

änderte meine Einrückung in Tabulatoren

und es löste mein Problem.

Sie können das gleiche tun,

zu Räumen

sowie nach Ihren Bedürfnissen.

Erwähnte den Schnappschuss desselben.

Geben Sie hier die Bildbeschreibung ein

Du bist toll
quelle
Ja, aber die Frage stellt die Situation, in der Sie mit Einrückungen als Leerzeichen beginnen und enden.
Magne
0

Vor kurzem hatte ich ein ähnliches Problem. Ich habe den großartigen Editor verwendet. Es ist kein Problem mit dem Code, sondern mit dem Editor.

Die folgende Änderung der Voreinstellungen hat bei mir funktioniert.

Sublime Text-Menü -> Einstellungen -> Einstellungen: Syntaxspezifisch :

{
    "tab_size": 4,
    "translate_tabs_to_spaces": true
}
Ajay
quelle