Sublimetext3 在SUMBOLE3中运行自定义命令之前保存文件

Sublimetext3 在SUMBOLE3中运行自定义命令之前保存文件,sublimetext3,sublimerepl,Sublimetext3,Sublimerepl,这个问题和这个问题很相似,从那个问题(以及给出的答案)开始已经过了几年,我使用的是升华文本3(不是2),所以我相信这个新问题是合理的 我已设置自定义密钥绑定: { "keys": ["f5"], "command": "project_venv_repl" } 要运行project\u venv\u repl.py脚本: 导入升华插件 类ProjectVenvReplCommand(sublime_plugin.TextCommand): """ 启动SubmiterePL,尝

这个问题和这个问题很相似,从那个问题(以及给出的答案)开始已经过了几年,我使用的是升华文本3(不是2),所以我相信这个新问题是合理的

我已设置自定义密钥绑定:

{
    "keys": ["f5"],
    "command": "project_venv_repl"
}
要运行
project\u venv\u repl.py
脚本:

导入升华插件
类ProjectVenvReplCommand(sublime_plugin.TextCommand):
"""
启动SubmiterePL,尝试使用项目的指定
python解释器。
使此文件正常工作的说明摘自:
https://stackoverflow.com/a/25002696/1391441
"""
def运行(自我、编辑、打开_文件=“$file”):
“”“在project\u venv\u repl命令上调用”“”
cmd_list=[self.get_project_解释器(),'-i','-u']
如果打开\u文件:
cmd_list.append(打开_文件)
self.repl\u open(cmd\u list=cmd\u list)
def get_项目_解释器(自身):
“”“返回项目的指定python解释器(如果有)”
设置=self.view.settings()
return settings.get('python_解释器','/usr/bin/python'))
def repl_open(自我,命令列表):
“”“使用提供的命令打开SublimeREPL”“”
self.view.window().run_命令(
“回复打开”{
“编码”:“utf8”,
“类型”:“子流程”,
“cmd”:cmd_列表,
“cwd”:“$file_path”,
“语法”:“Packages/Python/Python.tmLanguage”
}
)
当按下
f5
键时,将在Submizerepl中运行打开的文件

我需要的是一种模仿“构建”快捷方式的方法(
Ctrl+B
)。这是:当按下
f5
键时,应在运行
project\u venv\u repl
命令之前保存当前(打开的)文件


可以将此指令添加到
project\u venv\u repl.py
脚本中,或者添加到键绑定定义中的
命令行中吗?

不需要做任何花哨的事情。如果只想在运行REPL之前保存当前视图,请编辑
ProjectVenvReplCommand
类的
run()
方法(在执行
project\u venv\u REPL
命令时调用该方法),并在开头添加以下行:

self.view.run_command("save")
这将以静默方式保存当前视图,除非以前没有保存过,在这种情况下,另存为。。。对话框将像往常一样打开

如果要在窗口中保存所有打开的文件,可以使用以下代码:

for open_view in self.view.window().views():
    open_view.run_command("save")

没有必要做任何花哨的事。如果只想在运行REPL之前保存当前视图,请编辑
ProjectVenvReplCommand
类的
run()
方法(在执行
project\u venv\u REPL
命令时调用该方法),并在开头添加以下行:

self.view.run_command("save")
这将以静默方式保存当前视图,除非以前没有保存过,在这种情况下,另存为。。。对话框将像往常一样打开

如果要在窗口中保存所有打开的文件,可以使用以下代码:

for open_view in self.view.window().views():
    open_view.run_command("save")

只需在您的
run()
方法中添加
self.view.run_命令(“save”)
。非常好,比我想象的简单多了。你能不能把你的评论变成一个答案,这样我就可以把它标记为接受?非常感谢。只需在您的
run()
方法中添加
self.view.run_命令(“save”)
。非常好,比我想象的简单多了。你能不能把你的评论变成一个答案,这样我就可以把它标记为接受?非常感谢。马特,我今天遇到了一个我以前没有注意到的问题。
self.view.run_命令(“save”)
命令将完美地保存当前(打开的)文件,但不会保存任何其他未保存更改的打开文件。我尝试将其更改为
self.view.run\u命令(“save\u all”)
,但它仍然只在运行之前保存当前文件。这能做到吗?@Gabriel查看我的编辑-你只需要迭代当前窗口中的所有视图。很抱歉花这么长时间回复Matt,我必须进行干净的操作系统安装。我尝试了您的解决方案,虽然它确实在当前视图中保存了所有未保存更改的文件,但它也显示了一个弹出窗口,要求我保存启动REPL的文件,或者类似的内容:
*REPL*[/home/gabriel/.pyenv/versions/test env/bin/python-I-u/home/gabriel/Github/test.py]
。如果选择Cancel,REPL将正常执行(未保存的文件现在已保存),但我不希望每次运行脚本时都关闭该弹出窗口。也许我应该开始一个新的问题?我已经提出了一个单独的问题。马特,我今天在回答这个问题时遇到了一个我以前没有注意到的问题。
self.view.run_命令(“save”)
命令将完美地保存当前(打开的)文件,但不会保存任何其他未保存更改的打开文件。我尝试将其更改为
self.view.run\u命令(“save\u all”)
,但它仍然只在运行之前保存当前文件。这能做到吗?@Gabriel查看我的编辑-你只需要迭代当前窗口中的所有视图。很抱歉花这么长时间回复Matt,我必须进行干净的操作系统安装。我尝试了您的解决方案,虽然它确实在当前视图中保存了所有未保存更改的文件,但它也显示了一个弹出窗口,要求我保存启动REPL的文件,或者类似的内容:
*REPL*[/home/gabriel/.pyenv/versions/test env/bin/python-I-u/home/gabriel/Github/test.py]
。如果选择Cancel,REPL将正常执行(未保存的文件现在已保存),但我不希望每次运行脚本时都关闭该弹出窗口。也许我应该提出一个新问题?我已经提出了一个单独的问题。