Sublime Text 3-确保文件末尾只有一行换行符



我正在使用Sublime Text 3,并希望确保在保存时只在文件末尾获得一行新行。目前,90%的时间我的空白都能很好地工作,使用:

"ensure_newline_at_eof_on_save": true

"trim_trailing_white_space_on_save": true

但是,每隔一段时间,文件就会在文件末尾保存两行新行。

当保存前最后一行出现空白时,就会出现这种情况,配置设置会添加一行换行符,然后删除空白。在配置中更改这些设置的顺序并不能解决此问题。

我还没有找到其他原因,所以这很可能是唯一的原因,尽管理想情况下我想检查保存时是否有不止一个换行符。

我工作的环境测试失败,除非一个文件的末尾只有一行新行,所以这有点痛苦。我的问题是,是否有一种插件/方法可以更严格地保存,确保只有一行尾随的新行。

编辑:

我已经扩展了我在下面发布的插件,现在可以使用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
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")
return None
class OneTrailingNewLineAtEndOfFileCommand(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
whitespace = ("n", "t", " ")
while pos >= 0 and self.view.substr(pos) in whitespace:
pos -= 1
# 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")

相关内容

  • 没有找到相关文章

最新更新