通过Sublime文本3插件传递元素



我正在开发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. insert命令(在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()命令,但它似乎不起作用。。。

提前感谢!

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

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

奖金:set_timeout需要一个回调函数。对于您所拥有的一行代码,请在python中查找lambda。

相关内容

  • 没有找到相关文章

最新更新