2016-05-12 1 views
0

Я работаю над плагином Sublime Text 3, который исправляет некоторые стандарты кодирования, которые у меня есть на работе (что у меня плохая привычка отсутствовать) В настоящее время я работаю с командой, запущенной в консоль. Most of the code was originally from this thread.Sublime Text 3 Сплав смены плагина to_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') 

И будет применять стандарты кодирования (там больше я планирую реализовать, но сейчас я буду придерживаться их) Я хотел бы это для запуска при сохранении.

Я попробовал просто изменить пробег (самостоятельно, отредактировать) на on_pre_save (самостоятельно, редактировать), но он не работает. Я не получаю никаких синтаксических ошибок, но это просто не работает.

Может ли кто-нибудь сказать мне, как выполнить этот запуск при сохранении вместо того, чтобы запускать команду?

ответ

3

На ST3 единственным способом получить объект Edit является запуск TextCommand. (Это в docs, но они не очень ясны). Но, к счастью, вы можете запустить команду почти так же, как вы делали.

Обработчики событий, такие как on_pre_save, могут быть определены только на EventListener. Событие on_pre_save() передается объекту вида, поэтому вам просто нужно добавить что-то вроде этого, которое начинается с команды, которую вы уже написали.

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

Я буквально только что понял это, прежде чем увидел это. Я уже написал плагин TabsToSpaces/SpacesToTabs, в котором была выполнена команда. Затем я поставил 2 и 2 вместе. – Snowdrama

0

Растворы я пришел в том, чтобы создать функцию 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') 

Надеюсь, этот код поможет кому-то!

Смежные вопросы