在 Sublime 3 中的 运行 自定义命令之前保存文件

Save file before running custom command in Sublime3

这个问题与这个问题类似Is it possible to chain key binding commands in sublime text 2?自那个问题(以及给出的答案)以来已经过去了几年,我使用的是 Sublime Text 3(不是 2),所以我相信这个新问题有道理。

我设置了自定义键绑定:

{
    "keys": ["f5"],
    "command": "project_venv_repl"
}

到 运行 project_venv_repl.py 脚本:

import sublime_plugin


class ProjectVenvReplCommand(sublime_plugin.TextCommand):
    """
    Starts a SublimeREPL, attempting to use project's specified
    python interpreter.

    Instructions to make this file work taken from:
    
    """

    def run(self, edit, open_file='$file'):
        """Called on project_venv_repl command"""
        cmd_list = [self.get_project_interpreter(), '-i', '-u']

        if open_file:
            cmd_list.append(open_file)

        self.repl_open(cmd_list=cmd_list)

    def get_project_interpreter(self):
        """Return the project's specified python interpreter, if any"""
        settings = self.view.settings()
        return settings.get('python_interpreter', '/usr/bin/python')

    def repl_open(self, cmd_list):
        """Open a SublimeREPL using provided commands"""
        self.view.window().run_command(
            'repl_open', {
                'encoding': 'utf8',
                'type': 'subprocess',
                'cmd': cmd_list,
                'cwd': '$file_path',
                'syntax': 'Packages/Python/Python.tmLanguage'
            }
        )

这 运行 是按下 f5 键时在 SublimeREPL 中打开的文件。

我需要的是一种模仿 "Build" 快捷方式 (Ctrl+B) 的方法。这是:当按下 f5 键时,当前(打开的)文件应该在 运行 执行 project_venv_repl 命令之前 保存

是否可以将此指令添加到 project_venv_repl.py 脚本或键绑定定义中的 command 行?

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

self.view.run_command("save")

这将自动保存当前视图,除非之前未保存过,在这种情况下,将像往常一样打开另存为...对话框。

如果你想保存window中所有打开的文件,你可以使用这个代码:

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