我一直在研究一个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),但它不起作用。我没有得到任何语法错误,但它只是不起作用。
有人能告诉我如何在保存时运行而不必运行命令吗?
答案 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')
希望这段代码可以帮助别人!