1

我正在开发一个 Sublime Text 3 插件,到目前为止我有一个小脚本,它使用三个类将所有文本从当前文件复制到另一个文件:

import sublime, sublime_plugin

# string and new file created
s = 0
newFile = 0

class CreateNewWindowCommand(sublime_plugin.WindowCommand):
    def run(self):
        global s, newFile
        s = self.window.active_view().substr(sublime.Region(0, self.window.active_view().size()))
        newFile = self.window.new_file()

class CopyTextCommand(sublime_plugin.TextCommand):
    def printAChar(self,char,edit):
        self.view.insert(edit, 0, char)

    def run(self, edit):
        global s
        st = list(s)
        for i in st[::-1]:
            self.printAChar(i, edit)

class PrintCodeCommand(sublime_plugin.WindowCommand):
    def run(self):
        self.window.run_command("create_new_window")
        newFile.run_command("copy_text")

该脚本首先通过 PrintCodeCommand 运行。

我对此代码有多个问题:

  1. 这是“正确”的方法吗?因为用全局变量传递东西似乎有点脏。
  2. 有没有办法创建一个可以同时使用 WindowCommand 和 TextCommand 的类?
  3. 插入命令(在 CopyTextCommand 中)首先插入,有没有办法在文件末尾追加?

还有一个:如何使用 sublime.set_timeout() ?因为像这样:

# ...
class CopyTextCommand(sublime_plugin.TextCommand):
    def printAChar(self,char,edit):
        sublime.set_timeout(self.view.insert(edit, 0, char) , 1000) 
        # I want to print a char one per second

或者使用 time.sleep() 命令,但它似乎不起作用......

提前致谢 !

4

1 回答 1

2

我将在这里简短地回答。如果您想了解更多详细信息,请创建单独的问题。

  1. 不,您可以将参数传递给运行命令。CopyTextCommand 的运行方法类似于def run(self, edit, content).
  2. 不,但您可以在创建的视图上运行文本命令,而不是传递它。您还可以应用名称或创建任意设置以识别正确的视图
  3. 查看文档(https://www.sublimetext.com/docs/3/api_reference.html)。第二个参数是偏移量。

奖励: set_timeout需要回调函数。对于像你这样的单行,在 python 中查找 lambda。

于 2013-11-27T02:15:35.670 回答