在Sublime3

时间:2016-10-04 12:39:59

标签: python sublimetext3

这是我几天前提出的这个问题的衍生物Save file before running custom command in Sublime3

我在Sublime Text 3中设置了自定义键绑定:

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

运行project_venv_repl.py脚本(请参阅here了解其功能):

import sublime_plugin


class ProjectVenvReplCommand(sublime_plugin.TextCommand):
    """
    Starts a SublimeREPL, attempting to use project's specified
    python interpreter.
    """
    def run(self, edit, open_file='$file'):
        """Called on project_venv_repl command"""

        # Save all files before running REPL <---- THESE TWO LINES
        for open_view in self.view.window().views():
            open_view.run_command("save")

        cmd_list = [self.get_project_interpreter(), '-i', '-u']

        if open_file:
            cmd_list.append(open_file)

        self.repl_open(cmd_list=cmd_list)

    # Other functions...

当按下f5键时,它会在SublimeREPL中运行打开的文件。 # Save all files before running REPL下面的两行应该在运行REPL之前保存所有已保存更改的已打开文件(如answer中所述)。

线条起作用,即:它们保存文件。但是他们还会连续显示两个 Save 弹出窗口,要求我保存REPL(?):

*REPL* [/home/gabriel/.pyenv/versions/test-env/bin/python -i -u /home/gabriel/Github/test/test.py]

test.py是调用脚本project_venv_repl的文件。取消两个弹出窗口后,脚本会正确执行。

如何在执行前使用project_venv_repl脚本保存所有已保存更改的已打开文件,不显示这些恼人的保存弹出窗口?

(所有这一切背后的想法是模仿Ctrl+B的行为,这将在构建脚本之前保存所有未保存的文件)

1 个答案:

答案 0 :(得分:1)

诀窍是只保存脏的文件并存在于磁盘上。

# Write out every buffer (active window) with changes and a file name.
window = sublime.active_window()
for view in window.views():
    if view.is_dirty() and view.file_name():
        view.run_command('save')

我与PHPUNITKIT有类似的问题。

  

save_all_on_run:仅保存磁盘上存在且具有脏缓冲区的文件

     

注意:&#34; save_all_on_run&#34;选项不再保存不合适的文件   存在于磁盘上。

     

此更改的原因是尝试保存不存在的文件   在磁盘上提示用户使用&#34;保存文件&#34;对话框,通常是   不希望的行为。

     

也许是另一种选择&#34; save_all_on_run_strict&#34;选项可以添加   之后,它会尝试保存磁盘上不存在的文件。

     

https://github.com/gerardroche/sublime-phpunit/commit/3138e2b75a8fbb7a5cb8d7dacabc3cf72a77c1bf