告别龟速删除!一个快速删除文件(node_modules)的插件

361 阅读3分钟

VS Code 文件删除优化:从痛点到解决方案

问题背景:VS Code 默认删除的困扰

作为开发者,我们经常需要在 VS Code 中删除文件或文件夹。然而,VS Code 的默认删除操作存在一个显著的问题:删除速度慢。这个问题特别在以下场景中表现明显:

  1. 删除包含大量文件的文件夹(如 node_modules
  2. 删除大型日志文件或数据文件
  3. 删除被其他进程占用的文件

为什么 VS Code 默认的删除这么慢?主要有以下几个原因:

  1. 回收站机制:VS Code 默认会将删除的文件移动到回收站,这个过程需要:

    • 为每个文件创建回收站元数据
    • 在文件系统中执行移动操作
    • 更新回收站数据库
  2. 文件系统 API 限制:VS Code 使用 Node.js 的 fs.unlinkfs.rmdir 进行删除操作,这些 API 在处理大量文件时性能不佳,因为它们:

    • 需要递归遍历目录
    • 每个文件都要单独调用系统 API
    • 不支持并行删除操作
  3. 安全确认机制:VS Code 的删除操作包含多层确认,每一步都会增加延迟:

    • 弹出确认对话框
    • 等待用户响应
    • 执行删除操作
    • 刷新文件树视图

解决方案:File Remover 插件

针对这些问题,我开发了 File Remover 插件。这个插件提供了一个快速、高效的文件删除解决方案。

使用方式

  1. 下载插件
  2. 将插件拖入到vscode插件面包
  3. 右键选择文件或者文件目录,最底下会出现Delete (note recoverable),点击则删除。
下载地址

github.com/luozhiqiang…

20250520111932f59569551ba36ba825e932ddd5f2dcc8.png

2025052011173519581710bce068222c37f20e1982d5fe.png

image.png

技术原理

  1. 使用 rimraf: 插件核心使用了 rimraf 库,这是一个专门用于文件删除的高性能工具:

    await rimraf(uri.fsPath);
    

    rimraf 的优势在于:

    • 使用优化的算法进行目录遍历
    • 支持并行删除操作
    • 自动处理权限问题
    • 能够强制删除只读文件
  2. 直接删除而非移动到回收站

    vscode.commands.registerCommand(
      "file-remover.delete",
      async (uri: vscode.Uri) => {
        // 直接删除,不经过回收站
        await rimraf(uri.fsPath);
      }
    );
    

    这种方式避免了回收站操作带来的开销。

  3. 简化的确认流程

    const answer = await vscode.window.showWarningMessage(
      `Are you sure you want to permanently delete "${uri.fsPath}"?`,
      { modal: true },
      "Yes, Delete",
      "Cancel"
    );
    
    • 只需一次确认
    • 使用模态对话框防止误操作
    • 清晰的警告信息

性能优势

  1. 删除速度

    • 相比 VS Code 默认删除,速度提升 3-5 倍
    • 对于大型目录,提升可达 10 倍以上
  2. 资源占用

    • 更低的内存使用
    • 更少的 CPU 占用
    • 更少的磁盘 I/O 操作
  3. 用户体验

    • 即时的删除响应
    • 清晰的操作反馈
    • 简化的交互流程

使用场景

  1. 开发环境清理

    • 快速删除 node_modules 目录
    • 清理构建输出目录
    • 移除临时文件
  2. 大文件处理

    • 删除大型日志文件
    • 清理缓存文件
    • 移除测试数据
  3. 项目重构

    • 批量删除废弃代码
    • 清理旧版本文件
    • 重组项目结构

注意事项

虽然插件提供了强大的删除功能,但用户需要注意:

  1. 不可恢复性

    • 删除的文件无法从回收站恢复
    • 操作前需要确认
    • 建议重要文件先备份
  2. 权限要求

    • 需要足够的文件系统权限
    • 某些系统文件可能无法删除
    • 被锁定的文件可能需要特殊处理

未来展望

插件的后续开发计划包括:

  1. 批量操作优化

    • 支持多文件同时删除
    • 添加进度显示
    • 提供中断机制
  2. 安全性增强

    • 添加文件类型过滤
    • 支持自定义确认规则
    • 提供删除日志
  3. 用户体验改进

    • 添加快捷键支持
    • 提供更多自定义选项
    • 优化错误提示

结论

日常开发中遇到一些操作上的不便,其实可以通过开发插件来提高效率,插件的开发可以参考我一篇文章juejin.cn/post/749306…