Sublime Text侧边栏文件夹不排序怎么办_Sublime设置排序逻辑【避坑】

2次阅读

sublime Text侧边栏默认不按字母排序是正常设计,需安装SideBarEnhancements插件并启用sort_folders_first、sort_directories_by_name和locale_sort选项,再右键刷新文件夹方可生效。

Sublime Text侧边栏文件夹不排序怎么办_Sublime设置排序逻辑【避坑】

侧边栏文件夹默认不按字母排序是正常行为

sublime text 的侧边栏(Sidebar)默认按文件系统返回顺序显示,而非字典序。它不会自动对文件夹和文件做统一排序,尤其在 macoswindows 上挂载的网络盘、符号链接、或含 Unicode 名称的目录中,顺序更不可控。这不是 bug,而是设计使然——Sublime 优先保持与底层文件系统的一致性,避免因排序引入额外延迟或路径解析歧义。

  • view.settings().set("folder_exclude_patterns", [...])file_exclude_patterns 不影响排序逻辑
  • 启用 "show_minimap": falseui 设置也完全无关
  • 第三方插件如 SideBarEnhancements 默认也不改排序,需额外配置

用 SideBarEnhancements 插件 + 自定义排序规则强制排序

目前最稳定可控的方式是安装 SideBarEnhancements 并配合其 sort_folders_firstsort_directories_by_name 两个设置。注意:这两个选项必须同时启用才生效,且仅作用于右键菜单「Refresh Folder」后的刷新动作,不是实时监听。

  • 安装后,在 Preferences → Package Settings → SideBarEnhancements → Settings 中添加:
{     "sort_folders_first": true,     "sort_directories_by_name": true,     "sort_files_by_name": true }
  • 修改保存后,**必须右键点击侧边栏任意文件夹 → 选择 Refresh Folder**,否则排序不触发
  • 如果项目含大量子目录(>500 个),首次刷新可能卡顿 1–2 秒,这是插件遍历+排序的正常开销
  • 该排序只影响侧边栏视觉顺序,不影响 Ctrl+P 模糊搜索、Ctrl+Shift+T 重开标签页等其他功能的排序逻辑

不要尝试用 override_settings 或 plugin_host 修改排序

有人试图通过 sublime-settings 文件覆盖或写 Python 插件 hook on_activated 来干预侧边栏渲染,这类做法基本无效。Sublime 的侧边栏由原生 C++ 模块驱动,未暴露排序钩子;plugin_host 进程无法访问侧边栏 dom 结构,所有基于 view.window().folders() 的重排逻辑都只影响 API 返回值,不改变 UI 显示。

  • 自定义 side_bar_visiblesidebar_width 等设置项,与排序完全无关
  • 修改 Packages/default/side_bar.py 属于危险操作,升级 Sublime 后会被覆盖,且极易导致侧边栏崩溃
  • 试图用 sublime_plugin.EventListener 监听 on_post_save 并调用 refresh_folder,会引发无限递归刷新

中文/Unicode 文件夹名排序异常怎么办

当文件夹名含中文、日文或混合编码(如 测试-01資料夾)时,即使启用了 sort_directories_by_name,也可能出现「测」排在「资」前面、「A-1」排在「AA」后面等不符合预期的情况。这是因为 Python 3 的 str.sort() 默认使用 ASCII 码序,非 locale-aware 排序。

  • SideBarEnhancements 当前版本(v4.2.3+)已内置 locale_sort 选项,但需手动开启:
{     "sort_directories_by_name": true,     "locale_sort": true }
  • 开启后,插件会调用系统 locale(如 zh_CN.UTF-8)进行排序,中文名将按拼音首字排序,英文仍按字典序
  • Windows 用户若发现 locale_sort 无效,需确认系统区域设置中「Beta 版:使用 Unicode UTF-8 提供全球语言支持」未被勾选(该选项会破坏 Python 的 locale 解析)
  • macOS/linux 下建议运行 locale 命令确认当前 locale 是否为 UTF-8 编码,否则排序可能退化为乱序

侧边栏排序本质是插件层妥协方案,不是核心功能。只要记住:排序靠 SideBarEnhancements + Refresh Folder 触发 + locale_sort 处理中文,其他任何“隐藏设置”或“强行 patch”的思路,大概率白忙活。

text=ZqhQzanResources