Sublime4 Save Copy As插件开发

Sublime4 Save Copy As插件开发

Save Copy As插件的作用

Save Copy As是Sublime4非常常用的一个插件,尤其是在开发、培训、教学等领域,它的作用是等你按ctrl+shift+s保存代码或内容时,可以自动另存为一份文件,同时自动保存本文件,而且自动保存后的文件名非常实用,比如我正在写一段代码index.php中的脚本,然后我需要另存为一份文件,边写边保存,此时按ctrl+shift+s可另存为一个新文件20250709.index.php,同一个文件多次按ctrl+shift+s后会变成有规律的文件,如20250709_1.index.php,20250709_2.index.php等文件,这样非常方便于日常教学和培训工作。

插件安装

1.在sublime软件中按快捷键ctrl+shift+p

2.install调出Package Control: Install Package回车

3.输入Save Copy As回车自动安装

查看插件

1.在sublime软件中按快捷键ctrl+shift+p

2.按快捷键list调出Package Control: List Package回车

设置插件使用的快捷键

点击sublime软件菜单中的preferences中的key binding,然后在右侧输入如下代码

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

对插件进行二次开发

默认情况下按ctrl+shift+s会保存成index.php.20250709或index.php.20250709_1等文件命名方式,这种方式会修改文件后缀,非常不合理,接下来就要搞定这个问题,最终开次开发后可以达到一种效果,自动保存成20250709.index.php或20250709_1.index.php这种合理的命名方式.

1.打开preferences中的browse packages

2.找到如下目录

C:\Users\Administrator\AppData\Roaming\Sublime Text\Installed Packages

3.在目录中找到插件文件Save Copy As.sublime-package,这个文件是一个压缩文件

4.用360zip打开并解压,此时会得到一个目录Save Copy As,目录中的文件如下

5.把解压后的目录拷贝到以下目录

C:\Users\Administrator\AppData\Roaming\Sublime Text\Packages

6.打开Save Copy As目录中的插件程序SaveCopyAs.py,并重写它的程序,如下

import sublime
import sublime_plugin
import datetime
import shutil
import os

class SaveCopyAsCommand(sublime_plugin.TextCommand):
    def run(self, edit):
        fileName = self.view.file_name()
        if fileName is None:
            sublime.error_message("You have to save the file first!")
            return

        now = datetime.datetime.now().strftime("%Y%m%d")
        folder, filename = os.path.split(fileName)
        base, ext = os.path.splitext(filename)

        new_filename = "{}.{}{}".format(now, base, ext)
        newFileName = os.path.join(folder, new_filename)

        self.view.window().show_input_panel(
            "Copy File Name:", newFileName, self.save_copy, None, None
        )

    def save_copy(self, newFilePath):
        # 在拷贝前先保存 buffer
        self.view.run_command("save")

        filePath = self.view.file_name()
        if filePath is None:
            return

        folder, filename = os.path.split(newFilePath)
        base, ext = os.path.splitext(filename)

        parts = base.split('.', 1)
        if len(parts) == 2:
            prefix = parts[0]  # 时间戳
            orig_name = parts[1]  # 原文件名
        else:
            prefix = base
            orig_name = ""

        i = 0
        candidate = newFilePath
        while os.path.exists(candidate):
            i += 1
            new_base = "{}_{}.{}".format(prefix, i, orig_name)
            new_name = "{}{}".format(new_base, ext)
            candidate = os.path.join(folder, new_name)

        shutil.copy2(filePath, candidate)
        sublime.status_message("File copied to: {}".format(candidate))

快捷键测试

插件程序重新开发后,进行结果测试.

1.桌面上新建php程序index.php

2.按ctrl+shift+s

3.查看另存文件名及文件内容

查看到桌面上新生成一个文件20250709.index.php,内容也正确.

4.对同一个脚本多次另存为,查看效果

结果也是正确的,说明二次开发的插件代码无误.

文章内容书写完毕,希望对大家有用.

1 COMMENT

云知梦

Sublime4 Save Copy As插件开发,希望对大家有用.

发表评论

邮箱地址不会被公开。 必填项已用*标注

晋公网安备14010902000157号   晋ICP备14001940号-4