【问题标题】:What is Sublime Text doing when I save a file?当我保存文件时,Sublime Text 在做什么?
【发布时间】:2014-01-05 05:54:56
【问题描述】:

我正在使用 Go 库 fsnotify 观看文件,我发现保存文件时触发了许多事件。

为什么 Sublime Text 做了这么多?

2013/12/17 20:46:25 event: "parser.go": MODIFY
2013/12/17 20:46:25 event: ".subl317.tmp": MODIFY
2013/12/17 20:46:25 event: "parser.go": DELETE
2013/12/17 20:46:25 event: ".subl317.tmp": DELETE
2013/12/17 20:46:25 event: "parser.go": CREATE
2013/12/17 20:46:27 event: "parser.go": MODIFY
2013/12/17 20:46:27 event: ".subl3aa.tmp": MODIFY
2013/12/17 20:46:28 event: ".subl28d.tmp": CREATE
2013/12/17 20:46:28 event: ".subl28d.tmp": MODIFY
2013/12/17 20:46:28 event: "parser.go": MODIFY
2013/12/17 20:46:28 event: ".subl3aa.tmp": MODIFY
2013/12/17 20:46:28 event: "parser.go": DELETE
2013/12/17 20:46:28 event: ".subl3aa.tmp": DELETE

【问题讨论】:

    标签: sublimetext sublimetext3


    【解决方案1】:

    Sublime Text 3(我假设你正在使用)默认使用原子保存(可以通过在用户设置中设置 "atomic_save": false 来禁用它),这意味着它会创建临时文件,然后覆盖原始文件(和保存时删除临时文件)。请参阅 Sublime 论坛上的 this thread 了解更多信息,尤其是来自 jps(Sublime 的作者)关于其缺点的回复。

    基本上,原子保存很有用,因为如果在保存过程中发生任何事情(理论上)不应该以损坏的原始文件结束。缺点包括文件元数据的潜在丢失(尽管 Sublime 使用本机 OS X 和 Windows API 来防止这种情况),具有非标准权限的目录中的意外行为(例如,它们允许修改现有文件,但不允许创建新文件),以及保存到某些网络驱动器或 Dropbox 等服务时出现问题,这是我亲身经历的。

    编辑

    自从我最初回答这个问题以来,我遇到了许多问题,其中 LESS/SASS/SCSS、Guard 等保存后文件监视编译器/预处理器没有做他们的事情,因为它们是原始文件观看已被原子保存删除,然后再次创建,但他们不再观看了。在使用网络文件系统(尤其是 SSHFS)时,它还会严重影响文件 I/O 速度。理论上这是一个好主意,但如果您不知道它的存在或它在做什么,它可能会造成严重破坏,因此如果您要对网络/共享/观看的文件进行任何类型的工作,最好只是转身它关了。只需转到 Preferences -> Settings-User 并添加此行

    "atomic_save": false
    

    到最后(文件必须是有效的JSON,因此请确保在上一行之后有一个逗号,)。保存,您就可以开始了!

    更新

    从 Sublime Text 3 Build 3072 开始,atomic_save 现在默认禁用!如果您是注册用户,您可以下载最新的开发版本here。此功能尚未移植到公测版(目前为 Build 3065),但希望很快会发布一个新版本。截至 2015 年 2 月/3 月,Sublime 的开发速度已大幅加快,并添加了许多新功能。一旦解决了这些错误,应该会发布一个新的公开版本。

    更新到 UPDATE

    "atomic_save": false(截至 2015 年 3 月)现在处于 Build 3080 及更高版本的默认设置中。

    【讨论】:

    • 我在使用 jsx watch 时遇到随机故障,它抱怨缺少文件/目录。关闭原子保存似乎可以解决问题,谢谢! facebook.github.io/react/docs/tooling-integration.html
    • 对于 LESS/SASS/SCSS 等文件监视编译器/预处理器,我遇到了与上述相同的问题,但使用的是 Plone 库 suna.reload。将“atomic_save”设置为 false 可以解决重新加载问题。谢谢!
    • 我在 OSX 上保存文件时遇到了 lsyncd 的问题。保存的文件只是没有传输到远程服务器。禁用 atomic_save 解决了这个问题。
    • 这并没有解决问题,我使用的是开发通道版本 3095。它为我保存的文件添加了 x 权限。我正在 windows 中编码,并且正在通过 samba 访问文件。
    • @kapitanluffy 这与这里描述的问题不同
    【解决方案2】:

    如果与name.php文件有关,保存后又得到另一个name.php-tmp文件,则可以删除PHPTools package 来自Preference ->Browse Packages,会被修正。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-06-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-24
      相关资源
      最近更新 更多