2016-05-12 8 views
0

私は仕事で使用しているいくつかのコーディング標準を修正したSublime Text 3プラグインに取り組んでいます(これは紛失してしまいます)。コンソール。 Most of the code was originally from this thread.崇高なテキスト3プラグインの実行を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) 

その後、あなただけ実行する必要があります。私は希望(もっと私が実装する予定はなく、今の私はこれらに固執するだろうがある)

view.run_command('replace') 

そして、それはコーディング標準を適用しますこれは保存時に実行されます。

私はrun(self、edit)をon_pre_save(self、edit)に変更しようとしましたが、動作しません。私は構文エラーはありませんが、それは動作しません。

このコマンドを実行する代わりに、保存時に実行する方法を教えてもらえますか?

答えて

3

ST3では、Editオブジェクトを取得する唯一の方法は、TextCommandを実行することです。 (それはdocsにありますが、それほど明確ではありません)。しかし、幸いなことに、あなたがやっているのと同じようにコマンドを実行することができます。

on_pre_saveのようなイベントハンドラは、EventListenerでのみ定義できます。 on_pre_save()イベントはビューオブジェクトに渡されるので、このようなものを追加するだけで済みます。このようなことは、すでに書いたコマンドをキックオフします。うまくいけば、このコードは、誰かを助け

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') 

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

私はこのLOLを見る前に、文字通りこれを理解しました。私は既にコマンドを実行したTabsToSpaces/SpacesToTabsプラグインを書いていました。それから、私は2と2をまとめる。 – Snowdrama

0

私が来たソリューションは、私が以前に記載されているコマンドを実行しますon_pre_save()関数を作成することでした!

関連する問題