首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SublimeText3插件on_modified api实现

SublimeText3插件on_modified api实现
EN

Stack Overflow用户
提问于 2013-07-30 09:54:16
回答 1查看 746关注 0票数 1

我正在为SublimeText3开发一些插件。

这个插件应该在每次修改文本时都会运行,所以看一下api。

reference.html

on_modified_async(view)是我猜到的那个。

代码是这样的:

代码语言:javascript
复制
#!/usr/bin/env python

import sublime, sublime_plugin, socket

class testCommand(sublime_plugin.TextCommand):
    def run(self, edit):
            self.view.insert(edit, 0, "Hello, World1!")
            self.view.insert(edit, 0, "Hello, World2!")
            def on_modified_async(self, view):
                self.view.insert(edit, 0, "Hello, World3!")

此代码适用于Hello,world 1&2,但3从未触发。

我对SublimeText插件和python3.3开发都很陌生。我错过了什么?谢谢。//编辑

代码语言:javascript
复制
 MESSAGE = self.view.substr(0,50)
TypeError: substr() takes 2 positional arguments but 3 were given

看来我给出了两个位置论点,而不是3个。

我有一个错误:AttributeError:'MyEventListener‘对象没有属性’view‘……我的代码有什么问题(编辑)

代码语言:javascript
复制
import sublime, sublime_plugin, socket

class testCommand(sublime_plugin.TextCommand):
    def run(self, edit):  
        self.view.insert(edit, 0, "Hello, World1!")

class MyEventListener(sublime_plugin.EventListener):
    def on_modified_async(self,view):
        self.view.insert(edit, 0, "Hello, World2!")

--

代码语言:javascript
复制
Traceback (most recent call last):
  File "/Applications/Sublime Text.app/Contents/MacOS/sublime_plugin.py", line 279, in on_modified_async
    callback.on_modified_async(v)
  File "/Users/ken/Library/Application Support/Sublime Text 3/Packages/test/test.py", line 11, in on_modified_async
    self.view.insert(edit, 0, "Hello, World2!")
AttributeError: 'MyEventListener' object has no attribute 'view'

这是工作代码:

代码语言:javascript
复制
import sublime, sublime_plugin, socket

class MarkdownLiveCommand(sublime_plugin.TextCommand):
    def run(self, edit):  
        tcp(self.view)

class MyEventListener1(sublime_plugin.EventListener):
    def on_modified_async(self, view):
        tcp(view)

def tcp(view):
        #do the job
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-07-30 10:29:52

正如在文档中所描述的,您需要创建一个扩展sublime_plugin.EventListener的类,并在那里定义您的on_modified_async方法--在TextCommandrun方法中定义它实际上什么也不做。就像这样:

代码语言:javascript
复制
class MyEventListener(sublime_plugin.EventListener):
    def on_modified_async(self, view):
        edit = view.begin_edit()
        view.insert(edit, 0, "Hello, World2!")
        view.end_edit(edit)

对于substr方法的错误,view.substr采用一个sublime.Region实例,而不是两点:

代码语言:javascript
复制
message = self.view.substr(sublime.Region(0, 50))

错误消息可能有点混乱,因为第一个参数是视图本身;传递两个显式参数将导致调用带有三个参数的方法。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17943802

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档