【问题标题】:sublime - save all open/loaded files that have names?sublime - 保存所有打开/加载的具有名称的文件?
【发布时间】:2013-10-22 09:54:56
【问题描述】:

在 Sublime Text 2 中,我希望能够保存所有打开/加载的具有名称的文件。

我喜欢 Sublime 如何拥有带有文件名的文件,以及从未保存过的文件,并且可以关闭它,它会记住无标题文件并重新加载它们而无需我保存它们。 但是当一个文件有一个文件名并且缓冲区中的一些更改尚未保存时,sublime 会显示它,带有文件名和圆圈,我关闭 sublime,然后重新打开它,我 sublime 已经按原样记住了它,所以更改仍未保存到文件中。太好了.. 但是.. 我想要一个命令来保存所有的,但不是无标题的。

菜单中有一个全部保存选项,但会弹出一个对话框询问是否保存无标题文件。

编写一个命令将保留未命名的命令并保存带有文件名的命令会涉及哪些 API 函数? (有没有我可以运行的使用这些 API 函数的示例代码?)

【问题讨论】:

    标签: python sublimetext2


    【解决方案1】:

    AFAIK,打开的文件由一个或多个视图表示。因此,尝试获取所有视图并使用文件名保存这些视图。我写了一个简单的例子。希望对你有帮助。

    顺便说一句,您可以通过以下链接查看所有 API。

    Sublime Text 2 API Reference

    import sublime, sublime_plugin
    
    class SaveAllExistingFilesCommand(sublime_plugin.ApplicationCommand):
        def run(self):
            for w in sublime.windows():
                self._save_files_in_window(w)
    
        def _save_files_in_window(self, w):
            for v in w.views():
                self._save_exiting_file_in_view(v)
    
        def _save_exiting_file_in_view(self, v):
            if v.file_name():
                if v.is_dirty():
                    v.run_command("save")
    

    【讨论】:

    • 谢谢,刚刚尝试输入,虽然类似的运行不适用于 view.run_command('..') 相关问题 stackoverflow.com/questions/19532204/… 同时我会尝试绑定。
    • @barlop 这是一个ApplicationCommand,所以你不能在视图中运行它。您可以使用键盘映射或将ApplicationCommand 更改为TextCommand 并相应地将run(self) 更改为run(self, edit)
    • 谢谢,我看到您的代码运行良好。我明天也试试 ApplicationCommand->TextCommand。
    • 如果我能从命令行启动它就太好了。这是一个相关问题,可能在您广泛的知识范围内! stackoverflow.com/questions/20880055/…
    【解决方案2】:

    lhuang 的answer 非常棒,而且完全符合我的想法。确保将插件保存为 Packages/User/save_all_existing_files.py 以使其正常工作。您可以通过Preferences -> Browse Packages... 菜单项访问Packages 目录。不过,我确实添加了一些内容来让您的生活更轻松一些 - 一个菜单项和一个组合键。

    您通常不应该编辑Packages/Default 目录中的任何内容,因为所有文件都可以被覆盖/扩展,但在这种情况下,出于美观考虑,我推荐它。打开Packages/Default/Main.sublime-menu并在第128行之后添加以下行,这应该是save_all菜单项:

    { "command": "save_all_existing_files", "caption": "Save All Named Files", "mnemonic": "F" },
    

    这将在File 菜单中添加一个“保存所有命名文件”选项。接下来,转到Preferences -> Key Bindings - User 并添加以下行:

    { "keys": ["ctrl+alt+shift+s"], "command": "save_all_existing_files" },
    

    如果这个文件没有任何其他内容,请将上面的行用方括号[ ] 括起来并去掉结尾的逗号,否则Sublime 会抱怨你。

    保存键盘映射文件后,您可以通过按 CtrlAltShiftS 来触发命令。显然,如果你不喜欢它们,你可以改变它们。如果您选择的组合会产生奇怪的行为,请查看 @skuroda 的 FindKeyConflicts 插件 - 它对于排除您的设置非常宝贵,尤其是在开发您自己的软件包时。

    祝你好运!

    【讨论】:

    • 是的,它看起来不错,我还没有投票或接受任何东西,因为我还没有机会尝试它,但我可以看到它看起来不错。也感谢您的补充。我已经好几个小时没有带好电池的笔记本电脑了。
    • 谢谢,对文件菜单的补充。 save_all_existing_files 的绑定看起来不是一个好的选择,因为它必须执行两次 ctrl-s 才能正常保存。使用该 ctrl-s ctrl-n 绑定,如果只是为常规保存执行 ctrl-s,它不会响应,我想它想知道之后是否会执行 ctrl-n。
    • @barlop 你是对的,我也注意到了同样的事情。试试"ctrl+alt+shift+s",它应该会更好。我刚刚更新了我的答案以反映它。
    • 我没有添加到现有的Main.sublime-menu 文件,而是在Packages/User/ 文件夹中创建了一个新文件,它将显示在文件项的底部。这是该文件的内容。 [ { "caption": "File", "mnemonic": "F", "id": "file", "children": [ { "command": "save_all_existing_files", "caption": "Save All Existing Files", "mnemonic": "x" }, ] } ]
    【解决方案3】:

    只需将下一行添加到Preferences > Key Bindings - User

    { "keys": ["super+shift+s"], "command": "save_all" }
    

    super 是 OS X 中的命令键。在 Windows 上使用 ctrl

    【讨论】:

    • 此人希望保存任何具有名称的有效文件。当打开一个未命名的文档时,ST 无法执行此操作。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-13
    • 2017-02-26
    • 2016-02-04
    • 1970-01-01
    相关资源
    最近更新 更多