根本原因是samba挂载的远程文件系统事件通知不可靠,sublime text默认监听inotify或fsevents,但cifs/smb协议无法稳定传递in_modify或in_attrib事件,导致反复误判“文件被外部修改”,尤其保存go/python文件时触发gopls或linter写临时文件,进一步放大误报;最稳妥解法是禁用自动重载,设"always_reload_on_change": false,并配合noac、cache=none等挂载参数确保状态同步。

为什么Samba共享下Sublime会疯狂重载文件
根本原因是Samba挂载的远程文件系统事件通知不可靠,Sublime Text默认监听inotify或FSEvents,但CIFS/SMB协议在Linux/macOS客户端上无法稳定传递IN_MODIFY或IN_ATTRIB事件,导致Sublime反复误判“文件被外部修改”,尤其在保存Go/Python等语言文件时触发gopls或linter写临时文件、生成.swp或.pyc,进一步放大误报。
禁用自动重载 + 手动控制时机
直接关掉always_reload_on_change是最稳妥的解法,避免被Samba的虚假变更通知拖垮编辑体验:
- 打开
Preferences → Settings,在右侧用户设置中添加:"always_reload_on_change": false - 保留
"hot_exit": true和"remember_open_files": true,确保意外关闭时不丢内容 - 需要重载时,用快捷键
Ctrl+R(Windows/Linux)或Cmd+R(macOS)手动刷新当前文件——比自动弹窗更可控
过滤Samba挂载路径下的监控
Sublime本身不支持按路径禁用文件监听,但可通过ignored_packages间接规避部分干扰:
- 在用户设置中加入:
"ignored_packages": ["AutoSetSyntax", "GitGutter"]——这些插件常因频繁读取状态触发重载 - 确保
folder_exclude_patterns包含Samba挂载点中的临时目录,例如:["*.swp", "__pycache__", ".git", ".vscode"] - 如果挂载点是
/mnt/samba-proj,在项目.sublime-project里显式排除:"folder_exclude_patterns": ["/mnt/samba-proj/.gopls-cache"]
Samba挂载参数必须加noac和cache=none
这是Linux/macOS客户端端最关键的底层修复,否则内核缓存会让Sublime看到“已修改但未落盘”的脏状态:
- 挂载命令必须含:
sudo mount -t cifs //server/share /mnt/samba -o username=user,password=pass,iocharset=utf8,noac,cache=none,vers=3.0 -
noac禁用属性缓存,防止mtime和size字段滞后 -
cache=none强制每次读写都穿透到服务端,避免本地缓存与真实状态脱节 - 务必指定
vers=3.0或更高(如vers=3.1.1),SMB2+协议对时间戳同步更严谨;vers=1.0会加剧重载问题
真正麻烦的不是配置本身,而是Samba挂载参数和Sublime监听机制之间的隐式耦合——改错一个参数,可能让重载从“每秒一次”变成“完全不触发”,得靠dmesg | grep CIFS和inotifywait -m /mnt/samba交叉验证才行。











