2016-08-30 2 views
2

sagen, dass ich einige Vier Abstand Text in die Zwischenablage kopieren:Sublime - Wie kann ich Einrückungen einfügen und konvertieren, um sie an die Zieldatei anzupassen?

var double = function(number){ 
<four spaces>return number * 2 
} 

und in eine Datei einfügen, die Registerkarte getrennt ist. Wie kann ich das Einfügen mit der eigenen Einrückung der lokalen Datei automatisch einrücken lassen? Eg, wenn ich in eine Datei mit Tab einfügen für Einzug einrichten, sollte es automatisch konvertieren:

var double = function(number){ 
<a tab>return number * 2 
} 

PS. Ich kenne die paste_and_indent Verknüpfung. Das tut nicht, was ich verlange.

+0

Eine mögliche manuelle Abhilfe ist, die Befehlspalette zu verwenden. Es gibt Befehle für ** In Leerzeichen konvertieren ** und ** In Tabs konvertieren **. Aufgrund des Fuzzy-Abgleichs können Sie in der Regel schnell dazu kommen, indem Sie 'ctspace' oder' cttab' eingeben. –

Antwort

1

Wie in den Kommentaren erwähnt, gibt es Befehle für Convert Einrückungen zu Spaces und Convert Einrückungen zu Tabs.

sublime_tabs_to_spaces

Diese können auch mit den expand_tabs und unexpand_tabs Befehle bzw. aufgerufen werden, so dass, wenn Sie diese jedes Mal wenn Sie Einfügen in eine Datei schießen möchten, können Sie ein kleines Plugin erstellen.

Gehen Sie zu Preferences > Browse Packages und erstellen Sie eine neue Datei (z. B. autoindent.py) unter dem Ordner User. Fügen Sie die folgenden:

import sublime_plugin 

class AutoIndentListener(sublime_plugin.EventListener): 
    def on_post_text_command(self, view, command_name, args): 
     if command_name in ['paste', 'paste_and_indent']: 
      s = view.settings() 
      tab_size = s.get('tab_size') 
      if s.get('translate_tabs_to_spaces'): 
       view.run_command('expand_tabs') 
      else: 
       spaces = 4 
       if tab_size == spaces: 
        view.run_command('unexpand_tabs') 
       else: 
        view.run_command(
         'set_setting', 
         {"setting": "tab_size", "value": spaces}) 
        view.run_command('unexpand_tabs') 
        view.run_command(
         'set_setting', 
         {"setting": "tab_size", "value": tab_size}) 
        view.run_command('unexpand_tabs') 

Jedes Mal, wenn Sie die paste oder paste_with_indent Shortcuts verwenden, ist es die translate_tabs_to_spaces Einstellung der aktuellen Ansicht prüft (einrücken Mit Spaces im Menü oben) und führt den entsprechenden Befehl auf die Datei.


bearbeiten

Wenn Sie wissen, wie viele Räume der Code, den Sie Einfügen sind hat Ich denke, etwas Ähnliches wie die oben wahrscheinlich die einfachste Möglichkeit. Es setzt im Wesentlichen nur die Tab-Größe auf die Größe der Leerzeichen (bis 4 in diesem Fall), wenn nicht das Gleiche, konvertiert den 4-Abstand Code in Tabs, dann setzt und konvertiert zu was auch immer die Tab-Größe ursprünglich festgelegt wurde .

Wenn Sie etwas mehr beteiligt (das erkennt die Vertiefung des eingefügten Code, zum Beispiel) und fühle mich wie ein Blick auf den Code mit, entpacken Default.sublime-package vom Haupt Sublime Ordner Pakete und haben einen Blick auf:

  • detect_indentation.py: Enthält Code, der aufgerufen wird, wenn Sie raten Einstellungen aus dem Puffer wählen aus dem Menü (siehe oben), die möglicherweise geändert werden, um die Vertiefung des eingefügten Code zu erraten.
  • indentation.py: Es enthält den Code für expand_tabs und unexpand_tabs. Beide sind Unterklassen von TabCommand, so können Sie Unterklasse und implementieren Sie Ihre eigenen.

z.

from Default.indentation import TabCommand 

class UnexplodeTabs(TabCommand): 
    def do(self, edit, only_leading=True, spaces=None, **kw): 
     # your code 

Dann können Sie die oben ersetzen:

import sublime_plugin 

class AutoIndentListener(sublime_plugin.EventListener): 
    def on_post_text_command(self, view, command_name, args): 
     if command_name in ['paste', 'paste_and_indent']: 
      s = view.settings() 
      if s.get('translate_tabs_to_spaces'): 
       view.run_command('expand_tabs') 
      else: 
       view.run_command('unexplode_tabs') 
+0

Dies ist eine ausgezeichnete Antwort und genau das, was ich wollte! Nach dem Ausführen der Schritte (und dem Neustart von sublime), die 4 Leerzeichen in ein Dokument mit "Spaces: 2" einfügen, ändert sich der Abstand leider nicht. Hast du irgendwelche Vorschläge, um mir bei der Untersuchung zu helfen? Nochmals vielen Dank für eine ausgezeichnete Antwort. – mikemaccana

+0

@mikemaccana Kein Problem. Siehe meine Bearbeitung. Ich hoffe es hilft. –

Verwandte Themen