2

Wenn Sie Sublime Text 3 verwenden, werden die meisten meiner Dateien mit Leerzeichen eingerückt. Manchmal möchte ich jedoch eine wörtliche Registerkarte einfügen. Als ich vim wurde mit würde ich < Strg + v > <Tab> verwenden, aber das funktioniert nicht mit Sublime Text 3.Sublime Text 3 Tabulatorzeichen manuell einfügen

Ich habe gesucht und gesucht und nichts finden können. Bitte helfen Sie!

Antwort

3

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.