2016-05-12 1 views
0

Ich habe an einem Sublime Text 3 Plugin gearbeitet, das einige Programmierstandards bei der Arbeit behebt (Dass ich eine schlechte Angewohnheit habe zu fehlen) Ich habe dies zur Zeit mit einem Befehl ausgeführt die Konsole. Most of the code was originally from this thread.Sublime Text 3 Plugin wechseln zu on_pre_save

import sublime, sublime_plugin 

class ReplaceCommand(sublime_plugin.TextCommand): 
    def run(self, edit): 
     #for each selected region 
     region = sublime.Region(0, self.view.size()) 
     #if there is slected text 
     if not region.empty(): 
      #get the selected region 
      s = self.view.substr(region) 

      #perform the replacements 
      s = s.replace('){', ') {') 
      s = s.replace('}else', '} else') 
      s = s.replace('else{', 'else {') 

      #send the updated string back to the selection 
      self.view.replace(edit, region, s) 

Dann brauchen Sie nur auszuführen:

view.run_command('replace') 

Und es wird die Coding-Standards anwenden (es gibt mehr plane ich jetzt implementieren, aber ich werde mit diesen Stick) Ich möchte Dies wird beim Speichern ausgeführt.

Ich habe versucht, nur Lauf (selbst, bearbeiten) zu on_pre_save (selbst, bearbeiten), aber es funktioniert nicht. Ich bekomme keine Syntaxfehler, aber es funktioniert einfach nicht.

Kann mir jemand sagen, wie man diesen Befehl auf Speichern ausführen, anstatt den Befehl ausführen zu müssen?

Antwort

3

Auf ST3 ist die einzige Möglichkeit, ein Edit Objekt zu erhalten, indem Sie eine TextCommand ausführen. (Es ist in der docs, aber sie sind nicht sehr klar). Aber glücklicherweise können Sie den Befehl so ausführen, wie Sie es bisher getan haben.

Ereignishandler, wie on_pre_save, können nur unter EventListener definiert werden. Das on_pre_save()-Ereignis wird an ein Ansichtsobjekt übergeben, sodass Sie nur etwas hinzufügen müssen, das den Befehl auslöst, den Sie bereits geschrieben haben.

class ReplaceEventListener(sublime_plugin.EventListener): 
    def on_pre_save(self, view): 
     view.run_command('replace') 
+0

Ich habe das buchstäblich herausgefunden, bevor ich dieses lol sah. Ich hatte bereits ein TabsToSpaces/SpacesToTabs-Plugin geschrieben, das einen Befehl ausgeführt hat. Dann setze ich 2 und 2 zusammen. – Snowdrama

0

Die Lösungen ich kam, war eine on_pre_save() Funktion zu erstellen, die der Befehl ausgeführt ich früher aufgeführt:

import sublime, sublime_plugin 
class ReplaceCodeStandardsCommand(sublime_plugin.TextCommand): 
    def run(self, edit): 
     #for each selected region 
     region = sublime.Region(0, self.view.size()) 
     #if there is slected text 
     if not region.empty(): 
      #get the selected region 
      s = self.view.substr(region) 

      #perform the replacements 
      s = s.replace('){', ') {') 
      s = s.replace('}else', '} else') 
      s = s.replace('else{', 'else {') 

      #send the updated string back to the selection 
      self.view.replace(edit, region, s) 

class ReplaceCodeStandardsOnSave(sublime_plugin.EventListener): 
    # Run ST's 'unexpand_tabs' command when saving a file 
    def on_pre_save(self, view): 
     if view.settings().get('update_code_standard_on_save') == 1: 
      view.window().run_command('replace_code_standards') 

Hoffentlich Code jemand hilft!

Verwandte Themen