Ответ 1
EDIT:
Я расширил плагин, который я опубликовал ниже, много, и теперь он доступен для установки с помощью Package Control.
-
Single Trailing Newline - это пакет Sublime Text, который гарантирует, что в конце файла есть только одна конечная новая строка. Он работает, удаляя все пробелы и новые строки в конце файла (если они есть), а затем вставляет одну новую строку.
-
Плагин можно настроить для автоматического запуска при каждом сохранении файла. Это отключено по умолчанию, но, изменив настройки, он может быть включен либо для всех файлов, либо только для файлов определенных синтаксисов.
-
Элементы командной палитры приведены для изменения настроек пакета; добавление/удаление синтаксисов, которые будут запускать плагин, а также разрешить или запретить запуск плагина со всеми синтаксисами.
Исходный ответ:
Здесь будет плагин, который сделает это.
Сохраните следующий код в файле с расширением .py
, например. EnsureExactlyOneTrailingNewLineAtEndOfFileOnSave.py
и скопируйте файл в каталог пакетов. Когда вы сохраняете файл, он будет разделять все завершающие символы новой строки и пробелов в конце файла, а затем добавлять одну конечную новую строку.
#
# A Sublime Text plugin to ensure that exactly one trailing
# newline is at the end of all files when files are saved.
#
# License: MIT License
#
import sublime, sublime_plugin
def is_newline_or_whitespace(char):
if char == '\n' or char == '\t' or char == ' ':
return True
else:
return False
class OneTrailingNewLineAtEndOfFileOnSaveListener(sublime_plugin.EventListener):
def on_pre_save(self, view):
# A sublime_plugin.TextCommand class is needed for an edit object.
view.run_command('one_trailing_new_line_at_end_of_file_on_save')
return None
class OneTrailingNewLineAtEndOfFileOnSaveCommand(sublime_plugin.TextCommand):
def run(self, edit):
# Ignore empty files.
if self.view.size() == 0:
return
# Work backwards from the end of the file looking for the last
# significant char (one that is neither whitespace nor a newline).
pos = self.view.size() - 1
char = self.view.substr(pos)
while pos >= 0 and is_newline_or_whitespace(char):
pos -= 1
char = self.view.substr(pos)
# Delete from the last significant char to the end of
# the file and then add a single trailing newline.
del_region = sublime.Region(pos + 1, self.view.size())
self.view.erase(edit, del_region)
self.view.insert(edit, self.view.size(), "\n")