ファイル保存時に余計な空行を削除する

コードの折り畳み機能を使うようになって気付いたんですが、折り畳みの前後に空行を開いてコードを書き足していると、知らないうちに無駄な連続空行を作ってしまうことがあります。

それを自動的に解消する方法を考えてみました。2 行以上の連続空行を保存時に 1 行に縮めます。

(add-hook 'before-save-hook '(lambda ()
                                 (if (and (boundp 'outline-minor-mode)
                                          outline-minor-mode)
                                     (save-excursion
                                       (goto-char (point-min))
                                       (while (re-search-forward
                                               "^[ \t]*\n[ \t]*\n" nil t)
                                         (forward-char -1)
                                         (delete-blank-lines))))))

普通のテキストなど、勝手に縮められたくない場合の対処が必要かなと思います。上ではアウトライン・マイナーモードがオンの時のみ削除するようになっていますが、

(if (memq major-mode '(emacs-lisp-mode javascript-mode))

のように、編集中のメジャーモードによって判断する方法も考えられます。

また、delete-trailing-whitespace の呼び出しを加えるのも良いと思います。