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