Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/299.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何通过应用内python控制台修改sublime text 3文档?_Python_Sublimetext3 - Fatal编程技术网

如何通过应用内python控制台修改sublime text 3文档?

如何通过应用内python控制台修改sublime text 3文档?,python,sublimetext3,Python,Sublimetext3,我想对文档的文本应用一些函数。 例如,运行regexp替换,然后将结果文本转换为小写(或者使用提供的工具无法轻松完成的更复杂的示例) 我知道如何使用python实现这一点,因此我可以从python解释器运行一个简单的脚本来加载、修改和保存数据。 然而,这可能会非常烦人,并且考虑到存在一个用于sublime文本的python API,应该有一种方法可以直接运行脚本来修改打开的文档 我还希望避免使用宏,因为这需要我保存一个.sublime宏文件,但这类替代解决方案同样受欢迎 如何实现这一点?您可以从

我想对文档的文本应用一些函数。 例如,运行regexp替换,然后将结果文本转换为小写(或者使用提供的工具无法轻松完成的更复杂的示例)

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

我还希望避免使用宏,因为这需要我保存一个
.sublime宏
文件,但这类替代解决方案同样受欢迎


如何实现这一点?

您可以从启动脚本,使用并获取整个文件的内容:

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

在sublime控制台中,符号
视图
表示当前聚焦的视图(文件),而
窗口
表示当前窗口

因此,您可以使用方法
sublime.View.substr()
将当前选定视图的内容收集为字符串,以便进一步操作:

content=view.substr(sublime.Region(0,view.size()))
或者,如果您愿意,您可以先选择一些文本,然后获取所选内容。本例仅获取第一个选择的内容;如果要同时获取多个选择的内容,请根据需要进行修改

content=view.substr(view.sel()[0])
从这里你可以做任何你想做的事情。您的问题是在完成后将内容放回缓冲区

所有编辑操作都需要跟踪,以便能够撤消更改。因此,底层API需要所有修改缓冲区(插入、追加或替换文本等)的调用来提供
edit
对象。然而,这些对象受到严格控制;只有崇高才能代表你创造一个

因此,修改缓冲区的唯一方法是实现自己的
TextCommand
,或者通过
sublime.View.run_command()
方法利用现有命令

content=view.substr(sublime.Region(0,view.size()))
content=content.replace(“你好”,“你好”)
内容=内容。替换(“再见”、“再见”)
view.run_命令(“全选”)
view.run_命令(“插入”,{“字符”:content})
在这里,我将文本从缓冲区中取出,进行了一些替换,然后通过先选择所有内容,然后再插入新内容,将整个修改后的字符串放回缓冲区


请注意,如果您是通过
TextCommand
执行此操作,则需要在任何地方使用
self.view
,而不仅仅是
view

查看链接的文档。