Sublime Text 3:确认删除文件

时间:2015-06-16 22:35:29

标签: sublimetext3

有没有办法确认从树(左侧)删除文件或从上下文菜单中删除该选项?

很容易错过rename并点击delete file。然后文件就消失了。

我用谷歌搜索,发现它应该被移动到垃圾文件夹,但要么不适用于Win7,要么使用网络驱动器。结果,文件实际上被删除或移动到目前为止我无法跟踪它们的地方。

使用Sublime Text(build 3083)

6 个答案:

答案 0 :(得分:7)

选项1:修改side_bar.py文件

您可以使用sublime API来显示确定/取消对话框。您要查找的代码位于名为 side_bar.py 的文件中。此文件位于zip文件 Default.sublime-package 内。在Windows中,它通常位于 C:\ Program Files \ Sublime Text 3 \ Packages \ Default.sublime-package 中,可以使用WinRar等程序进行探索。

在该文件中找到DeleteFileCommand并添加这3个新行,因此它会改变:

class DeleteFileCommand(sublime_plugin.WindowCommand):
    def run(self, files):
        # Import send2trash on demand, to avoid initialising ctypes for as long as possible
        import Default.send2trash as send2trash

到此

class DeleteFileCommand(sublime_plugin.WindowCommand):
    def run(self, files):
        isSure = sublime.ok_cancel_dialog('Are you sure you want to delete the file?')
        if isSure != True:
            return
        # Import send2trash on demand, to avoid initialising ctypes for as long as possible
        import Default.send2trash as send2trash

我们正在显示确定/取消对话框,如果用户没有按确定,则我们会返回并且文件未被删除。

注意:

  • 您必须在课程DeleteFolderCommand中添加相同的代码,以便在删除文件夹时进行确认。
  • 最好先备份 Default.sublime-package 文件,以防出现问题。编辑:使用不同的文件夹进行备份,或者包装可能会加载两次导致问题,正如OP在评论中所说的那样。
  • 因为这是 python 代码缩进极为重要,所以不要 为标签替换任何空格,也不添加任何额外的空格,否则不会 工作(你可以看到它控制台)。

结果:

Sublime-confirm file deletion

选项2:使用现有包

正如user leeseihis answer所述,您可以使用SideBarEnhancements package来实现目标。此软件包在文件上下文菜单中添加了许多其他功能,如下图所示,但它是一个非常好的选择,因为您只需要安装一个现有的软件包。

SideBarEnhancements package

选项3:从上下文菜单中删除选项

Default.sublime-package 中编辑 Side Bar.sublime-menu (参见选项1)并删除此行(如果你想要删除该行,则需要删除该行删除文件夹):

{ "caption": "Delete File", "command": "delete_file", "args": {"files": []} },

答案 1 :(得分:2)

当我通过右键单击SideBar中的文件选择删除时,我会收到确认 也许是SideBarEnhancements。值得一试。

答案 2 :(得分:1)

虽然sergioFC的答案很有效,但我有点担心修改Default.sublime-package,因为有可能在Sublime更新时有一天会被覆盖,所以修复需要每次更新后手动重新应用。另一方面,SideBarEnhancements可能对于在删除文件时只想要确认的人来说功能太多。

或者,您可以通过创建一个文件(插件)~/.config/sublime-text-3/Packages/User/confirm_delete.py添加一个更能抵抗ST更新的简单确认对话框,其中包含以下内容:

from Default.side_bar import *

class DeleteFileCommand(sublime_plugin.WindowCommand):
    def run(self, files):
        if len(files) == 1:
            message = "Delete File %s?" % files[0]
        else:
            message = "Delete %d Files?" % len(files)

        if sublime.ok_cancel_dialog(message, "Delete") != True:
            return

        # Import send2trash on demand, to avoid initialising ctypes for as long as possible
        import Default.send2trash as send2trash
        for f in files:
            v = self.window.find_open_file(f)
            if v != None and not v.close():
                return

            send2trash.send2trash(f)

    def is_visible(self, files):
        return len(files) > 0

此代码基本上是来自DeleteFileCommand Default.sublime-package的{​​{1}}函数的副本,以及来自同一文件的side_bar.py的确认对话框,如Sublime所拥有的此类对话框原生于文件夹删除。

答案 3 :(得分:1)

WTF删除前没有确认对话框的软件。我真不敢相信悲伤但真实。只是愚蠢的软件!

答案 4 :(得分:0)

不幸的是,没有办法激活确认。通常,已删除的文件将移动到垃圾文件夹,但正如您所提到的,这仅适用于本地文件。共享网络驱动器上的文件仍会立即删除。这是一个Windows'功能' :(

  

本地回收站是Windows资源管理器的一部分 - 在网络上,您不会在服务器上处理资源管理器。本地资源管理器不会将文件复制到用户的工作站,只是为了将其放入回收站。

然而,您可以实现微软Shadow Copy,然后用户可以取消删除并比较版本。到目前为止,这是网络驱动器的唯一方法,直到sublime开发人员决定进行可选的确认对话框。

答案 5 :(得分:0)

根据@ iron77的回答,插件路径不存在(在我的情况下)。一种更简单的方法是:

1)单击“崇高文本”顶部栏菜单Tools-> Developer-> New Plugin

2)粘贴代码段

from Default.side_bar import *

class DeleteFileCommand(sublime_plugin.WindowCommand):
    def run(self, files):
        if len(files) == 1:
            message = "Delete File %s?" % files[0]
        else:
            message = "Delete %d Files?" % len(files)

        if sublime.ok_cancel_dialog(message, "Delete") != True:
            return

        # Import send2trash on demand, to avoid initialising ctypes for as long as possible
        import Default.send2trash as send2trash
        for f in files:
            v = self.window.find_open_file(f)
            if v != None and not v.close():
                return

            send2trash.send2trash(f)

    def is_visible(self, files):
        return len(files) > 0

3)另存为confirm_delete.py