2017-03-01 59 views
1

我想将某些功能应用于文档的文本。 像例如运行一个正则表达式替换,然后将结果文本转换为小写(或一些更复杂的示例,使用所提供的工具无法轻松完成)。如何通过应用程序中的python控制台修改崇高的文本3文档?

我知道如何使用python来做到这一点,所以我可以从python解释器运行一个简单的脚本来加载,修改和保存数据。 但是,这可能会非常烦人,并且考虑到用于崇高文本的python API的存在,应该有一种方法可以直接运行脚本来修改打开的文档。

我也希望避免使用宏,因为那些文件会要求我保存.sublime-macro文件,但同样欢迎此类替代解决方案。

我该如何做到这一点?

+0

[Sublime的Python API](http://www.sublimetext.com/docs/api-reference)有什么问题? – Alexander

回答

1

在崇高的控制台,符号view表示当前集中视图(文件),而window代表当前窗口。

所以,你可以使用plugin API方法sublime.View.substr()收集当前选择的视图的内容进行进一步操作的字符串:

content = view.substr(sublime.Region(0, view.size())) 

或者,如果你愿意,你可以先选择一些文本,然后抢选择的内容。这个例子只抓取第一个选择的内容;如果您想一次获取多个选项的内容,则根据需要进行修改。

content = view.substr(view.sel()[0]) 

从这里你可以做任何你想要的内容。您的问题是在完成后将内容放回缓冲区。

需要跟踪所有的编辑操作,以使Sublime能够撤消更改。基于这个原因,底层API需要所有调用缓冲区的调用(插入,附加或替换文本等)来提供一个edit对象。但是这些物体是严格控制的;只有Sublime可以代表您创建一个。

所以修改缓冲区的唯一方法是实现您自己的TextCommand,或者通过sublime.View.run_command()方法使用现有的命令。

content = view.substr(sublime.Region(0, view.size())) 
content = content.replace("Hello", "Bonjour") 
content = content.replace("Goodbye", "Au Revoir") 
view.run_command("select_all") 
view.run_command("insert", {"characters": content}) 

在这里,我拉文移出缓冲区,做了一些替换,然后首先选择一切,然后插入新的内容后面把整个修改后的字符串返回到缓冲区。

请注意,如果您是从TextCommand开始执行此操作,则需要随处使用self.view,而不仅仅是view

0

您可以从Python API启动脚本,并与使用,并得到整个文件的内容:

contents = self.view.substr(sublime.Region(0, self.view.size())) 
+0

@glS阅读链接的文档。 – Alexander