Es gibt eine Standardschlüsselbindung von Shift + Tab, um ein unformatiertes Tabulatorzeichen in das Dokument einzufügen, obwohl es in bestimmten kontextuellen Fällen (z. B. beim Erweitern eines Snippets) andere Funktionen übernimmt.
wird jedoch Indent Using Spaces
durch die folgende Einstellung gesteuert:
// Set to true to insert spaces when tab is pressed
"translate_tabs_to_spaces": false,
Wie hier wird standardmäßig false
gesehen, aber wenn man Indent using spaces
eingeschaltet, wird es auf true
. Wie der Kommentar darauf hinweist, wird, wenn diese Einstellung auf true
gesetzt ist, jeder Versuch, ein unformatiertes Tabulatorzeichen einzufügen, in eine Anzahl von Leerzeichen konvertiert.
Als Ergebnis fügt sogar die offizielle Schlüsselbindung in diesem Fall keine unformatierte Registerkarte ein.
Je nachdem, wie oft Sie eine Literalregisterkarte einfügen möchten, können Sie dies umgehen, indem Sie diese Einstellung vorübergehend ein- und ausschalten. Dies ist jedoch alles andere als ideal, auch wenn die Einstellung aus dem Menü in der Statusleiste umgeschaltet wird.
Da Sublime so anpassbar ist, können wir es automatisieren, um diese Arbeit für uns zu erledigen.
mit zu starten, eine Datei mit folgendem Inhalt erstellen und es in Ihrem User
Paket als literal_tab.sublime-macro
speichert (Verwendung Preferences > Browse Packages...
Ihr User
Paket zu finden, wenn Sie nicht sicher sind, wo es ist):
[
{ "command": "toggle_setting", "args": { "setting": "translate_tabs_to_spaces" } },
{ "command": "insert", "args": { "characters": "\t" } },
{ "command": "toggle_setting", "args": { "setting": "translate_tabs_to_spaces" } }
]
dann fügen Sie die folgenden zwei Tastenbelegungen zu Ihren Benutzerbindungen (Preferences > Key Bindings
im Menü, wenn es mehr Optionen, wählen User
und nicht Default
):
{
"keys": ["ctrl+k","tab"],
"command": "insert",
"args": {
"characters": "\t"
},
"context":
[
{ "key": "setting.translate_tabs_to_spaces", "operator": "equal", "operand": false }
]
},
{
"keys": ["ctrl+k","tab"],
"command": "run_macro_file",
"args": {
"file": "Packages/User/literal_tab.sublime-macro"
},
"context":
[
{ "key": "setting.translate_tabs_to_spaces", "operator": "equal", "operand": true }
]
}
Beide Bindungen enthalten einen Kontext, der bewirkt, dass er ausgelöst wird oder nicht, basierend auf dem Wert der translate_tabs_to_spaces
Einstellung, sodass zu einem bestimmten Zeitpunkt nur einer von ihnen tatsächlich aktiv ist und der andere automatisch deaktiviert wird.
Die erste Bindung ist für den Fall, wenn die Einstellung deaktiviert ist, in diesem Fall muss nur ein Tab-Zeichen eingefügt werden und es ist fertig. Im zweiten Fall wird stattdessen unser benutzerdefiniertes Makro von oben ausgeführt, wodurch die Einstellung deaktiviert, die Registerkarte eingefügt und anschließend wieder aktiviert wird.
In der Theorie brauchen Sie wirklich nur die zweite, wenn Sie die Einstellung für den Einzug immer eingeschaltet lassen, aber aufgrund des Prinzips der geringsten Überraschung ist es eine gute Idee, es unabhängig von der Einstellung zu arbeiten.
Natürlich können Sie einen beliebigen Tastenanschlag verwenden (ich bin auch an diesen aus vim gewöhnt), und der Name der Makrodatei spielt keine Rolle, solange sie die richtige Erweiterung hat und sie mit was übereinstimmt Die Bindung versucht auszuführen.
Hinweis: Obwohl Sie Sublime Text 3 in Ihrer Frage erwähnt, Sie Sublime Text 2 als auch markiert, so der Vollständigkeit halber auch zur Kenntnis, ich werde, dass die Informationen und hier dargestellte Lösung gleichmäßig auf beide Versionen gilt.