Что делает Sublime Text, когда я сохраняю файл?

Я просматривал файлы с помощью fsnotify, которая является библиотекой Go, и обнаружил, что при сохранении срабатывает множество событий. файл.

Почему 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

person jiyinyiyong    schedule 17.12.2013    source источник


Ответы (2)


Sublime Text 3 (который, как я предполагаю, вы используете) по умолчанию использует атомарные сохранения (его можно отключить, установив "atomic_save": false в ваших пользовательских настройках), что означает, что он создает временные файлы, а затем перезаписывает исходный файл (и удаляет временный файл) при сохранении. См. эту тему на форумах Sublime для получения дополнительной информации. особенно ответ от jps (автора Sublime) о его недостатках.

По сути, атомарное сохранение полезно, потому что, если что-то произойдет во время сохранения, вы (теоретически) не должны получить поврежденный исходный файл. Недостатки включают потенциальную потерю метаданных файлов (хотя Sublime использует собственные API-интерфейсы OS X и Windows, чтобы предотвратить это), неожиданное поведение в каталогах с нестандартными разрешениями (например, они позволяют изменять существующие файлы, но не создавать новые) и проблемы при сохранении на некоторые сетевые диски или службы, такие как Dropbox, с которыми я сталкивался лично.

ИЗМЕНИТЬ

Поскольку я первоначально ответил на этот вопрос, я столкнулся с рядом вопросов, в которых компиляторы/препроцессоры для отслеживания файлов после сохранения, такие как LESS/SASS/SCSS, Guard и т. д., не выполняли свою работу, потому что исходный файл, который они просматривали, был удаляли атомарным сохранением, потом снова создавали, но больше не смотрели. Это также может серьезно повлиять на скорость файлового ввода-вывода при работе с сетевыми файловыми системами, в частности с SSHFS. Теоретически это хорошая идея, но она может нанести ущерб, если вы не знаете, где она находится и что она делает. это от. Просто перейдите на Preferences -> Settings-User и добавьте эту строку

"atomic_save": false

до конца (файл должен быть в формате JSON, поэтому убедитесь, что после предыдущей строки стоит запятая ,). Сохраните, и все готово!

ОБНОВЛЕНИЕ

Начиная с Sublime Text 3 Build 3072, atomic_save теперь отключен по умолчанию! Если вы являетесь зарегистрированным пользователем, вы можете загрузить последнюю сборку разработки здесь. Эта функция не была перенесена в общедоступную бета-версию (в настоящее время сборка 3065), но, надеюсь, скоро будет выпущена новая версия. По состоянию на февраль/март 2015 года темпы разработки Sublime существенно ускорились, и был добавлен ряд новых функций. Как только в них будут устранены ошибки, должна появиться новая общедоступная версия.

обновить до ОБНОВЛЕНИЯ

"atomic_save": false (по состоянию на март 2015 г.) теперь находится в настройках по умолчанию, начиная со сборки 3080 и выше.

person MattDMo    schedule 17.12.2013
comment
У меня были случайные сбои при использовании jsx watch, когда он жаловался на отсутствующие файлы/каталоги. Отключение атомарных сохранений помогло, спасибо! facebook.github.io/react/docs/tooling-integration.html - person Sean; 22.08.2014
comment
У меня была та же проблема, что и описанная выше, для компиляторов/препроцессоров, отслеживающих файлы, таких как LESS/SASS/SCSS, но с библиотекой Plone сауна.reload. Установка для atomic_save значения false решает проблему перезагрузки. Спасибо! - person sunew; 08.10.2014
comment
У меня возникла проблема с lsyncd при сохранении файлов в OSX. Сохраненный файл просто не был передан на удаленный сервер. Отключение atomic_save решило эту проблему. - person boxdot; 10.02.2015
comment
это не решило проблему, я использую сборку 3095 канала разработчика, и он добавляет разрешения x к файлу, который я сохраняю. Я кодирую в Windows, и доступ к файлам осуществляется через самбу. - person kapitanluffy; 04.11.2015
comment
@kapitanluffy, это другая проблема, чем то, что здесь описывается - person MattDMo; 04.11.2015
comment
Ой, извините, не заметил. На самом деле я планировал прокомментировать проблему, связанную с этой. @MattDMo - person kapitanluffy; 04.11.2015
comment
это помогло понять, почему пакеты npm nodemon и pm2 --watch плохо работают с контейнерами докеров с монтированием томов. - person code_monk; 31.12.2015

Если это связано с файлом name.php и после сохранения вы получаете другой файл name.php-tmp, вы можете удалить PHPTools. package Из Preference ->Browse Packages, это будет исправлено.

person Kaushik Das    schedule 13.02.2016