2013-07-30 2 views
1

Я пытаюсь разработать некоторый плагин для SublimeText3.Плагин SublimeText3 on_modified api реализация

Плагин должен вести себя на каждом изменении текста, так глядя на апи

http://www.sublimetext.com/docs/3/api_reference.html

on_modified_async(view) это один использовать я догадался.

поэтому код выглядит следующим образом:

#!/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!") 

Этот код работает как задумано для Здравствуй, мир 1 & 2, но 3 никогда не увольняют.

Я совершенно новый и для плагина SublimeText, и для разработки python3.3. Что я пропущу? Спасибо. // EDIT

MESSAGE = self.view.substr(0,50) 
TypeError: substr() takes 2 positional arguments but 3 were given 

это выглядит я дал 2 позиционные аргументы, а не 3.


Я получил сообщение об ошибке: AttributeError: объект 'MyEventListener' не имеет атрибута 'вид'. ..... Что случилось с моим кодом (Edited)

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!") 

-

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' 

Это рабочий код:

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 

ответ

3

Как описано в документации, необходимо создать класс, расширяющий sublime_plugin.EventListener и определить свой метод on_modified_async там - определив его в run методом TextCommand фактически ничего не делает. Что-то вроде этого:

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 экземпляр, а не две точки:

message = self.view.substr(sublime.Region(0, 50)) 

Сообщение об ошибке может быть немного запутанным, потому что первый аргумент является просматривать себя; передача двух явных аргументов приводит к вызову метода с тремя аргументами.

+1

Спасибо. Sublime.Region (0, 50) разрешается; однако у меня есть ошибка: AttributeError: объект 'MyEventListener' не имеет атрибута 'view' ...... Что не так с моим кодом (Edited). –

+1

@KenOKABE Класс 'EventListener' не имеет атрибута для представления, но он передается функции. Поэтому просто используйте 'view' вместо' self.view'. – l4mpi

+0

Хорошо, у меня есть идея, спасибо большое. Возможно, код, представленный выше, все еще получил некоторую ошибку, но моя другая версия работает нормально. –

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