我正在开发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运行。
我对这个代码有多个问题:
- 这是正确的方法吗?因为传递带有全局变量的东西似乎有点脏
- 有没有办法创建一个可以同时使用WindowCommand和TextCommand的类
- 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()命令,但它似乎不起作用。。。
提前感谢!
我在这里简单回答。如果您想了解更多详细信息,请创建单独的问题。
- 不可以,您可以将参数传递给run命令。CopyTextCommand的run方法看起来类似于
def run(self, edit, content)
- 不可以,但您可以在创建的视图上运行文本命令,而不是四处传递。您也可以应用名称或创建任意设置来识别正确的视图
- 查看文档(https://www.sublimetext.com/docs/3/api_reference.html)。第二个参数是偏移量
奖金:set_timeout
需要一个回调函数。对于您所拥有的一行代码,请在python中查找lambda。