Sublime Text 3插件更改运行到on_pre_save

时间:2016-05-12 18:24:03

标签: python plugins sublimetext3

我一直在研究一个Sublime Text 3插件,它修复了我工作中的一些编码标准(我有一个缺少的坏习惯)我目前正在使用控制台中运行的命令。 Most of the code was originally from this thread.

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),但它不起作用。我没有得到任何语法错误,但它只是不起作用。

有人能告诉我如何在保存时运行而不必运行命令吗?

2 个答案:

答案 0 :(得分: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')

答案 1 :(得分: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')

希望这段代码可以帮助别人!