Sublime Text 3 - ファイルの末尾に改行が 1 つだけあることを確認する 質問する

Sublime Text 3 - ファイルの末尾に改行が 1 つだけあることを確認する 質問する

私はSublime Text 3を使用していますが、のみ保存時にファイルの末尾に 1 行の新しい行を追加します。現時点では、次のコードを使用すると、90% の確率で空白が完璧に機能します。

"ensure_newline_at_eof_on_save": true

そして

"trim_trailing_white_space_on_save": true

...しかし、時々、ファイルが保存されると、ファイルの末尾に新しい行を追加します。

これは、保存前の最後の改行に空白があり、設定で改行が追加されている場合に発生するようです。それから空白を削除します。config でこれらの設定の順序を変更しても、この問題は解決されません。

他に原因は見つからなかったため、これが唯一の原因である可能性はありますが、理想的には、保存時に改行が 1 つ以上あるかどうかを確認したいと思います。

私が作業している環境では、ファイルの末尾に新しい行が 1 つだけなければテストに失敗するので、これは少し面倒です。私の質問は、保存時に厳格にして、末尾に新しい行が 1 つだけ残るようにするプラグインや方法があるかどうかです。

ベストアンサー1

編集:

下記に掲載したプラグインを大幅に拡張し、以下を使用してインストールできるようになりました。パッケージコントロール

  • 末尾に単一の改行は、ファイルの末尾に改行が 1 つだけあることを確認する Sublime Text パッケージです。ファイルの末尾にある空白と改行 (存在する場合) をすべて削除し、改行を 1 つ挿入することで機能します。

  • プラグインは、ファイルが保存されるたびに自動的に実行されるように設定できます。これはデフォルトでは無効になっていますが、設定を変更することで、すべてのファイルに対して、または特定の構文のファイルに対してのみ有効にすることができます。

  • コマンド パレット エントリは、パッケージの設定を変更したり、プラグインをトリガーする構文を追加/削除したり、すべての構文でプラグインの実行を許可または禁止したりするために提供されます。

元の回答:

これを実行するプラグインがここにあります。

次のコードを拡張子 (.py例: ) のファイルに保存し、EnsureExactlyOneTrailingNewLineAtEndOfFileOnSave.pyそのファイルをパッケージ ディレクトリにコピーします。ファイルを保存すると、ファイルの末尾にあるすべての末尾の改行と空白が削除され、末尾に 1 つの改行が追加されます。

#
# 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")

おすすめ記事