2013-08-07 64 views
1

我试图将Sublime Text构建系统移植到插件。使用Sublime Text插件在当前文件中搜索并替换

构建系统将接收当前的文件,并使用此代码通过它去:

for line in fileinput.input(inplace=1): 
    sys.stdout.write(makeReplacements(line)) 

现在,在插件语法我去的事实,让我当前文件的内容的方式是:

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

但是现在我不确定我应该怎么做下一个操作。

for line in input(inplace=1): 

我怎样才能在文件中进行替换,然后保存它?

回答

0

正如@RazerM所述,第一个参数必须是文件路径。所以对于我的例子来说,这将起作用。

for line in fileinput.input(self.view.file_name(), inplace=1): 
    sys.stdout.write(self.makeReplacements(line)) 
1

我不认为Sublime Text插件API可以保存缓冲区,但是您可以使用sublime.View class中的file_name()方法并直接使用该文件。

正如@MattDMo所述,可以使用view.run_command('save')保存文件。

如果您的旧构建文件可以使用该文件名,那么使用该文件名可能会更容易。

+0

不正确。查看'Packages/Default/save_on_focus_lost.py'获取通过插件保存文件的示例。 – MattDMo

+0

这解释了如何保存,但我将如何输出该行来替换当前行? 'inplace = 1'和'sys.stdout.write(makeReplacements(line))'似乎不起作用。我应该将每行存储在一个变量中,然后替换视图的内容并保存它? –

+0

[fileinput](http://docs.python.org/2/library/fileinput.html)文档表明您需要传递文件作为第一个参数:'fileinput.input(filename)'。它之前的工作原因是它默认使用第一个命令行参数。 – RazerM

相关问题