Emacs delete-Hinter-Leerzeichen außer aktueller Zeile
-
30-09-2019 - |
Frage
Ich habe vor kurzem Emacs (delete-trailing-whitespace)
Funktion meiner 'before-save-hook
für einige Programmierarten hinzugefügt, aber ich finde es ziemlich frustrierend, dass es Leerzeichen aus der Linie löscht ich zur Zeit bearbeiten. Irgendwelche Vorschläge, wie dieses Problem zu beheben?
Lösung
Da delete-trailing-whitespace
Hinsichten verengenden, eine Lösung ist, die Puffer auf den Abschnitt zu verengen Vor der aktuellen Zeile und es nennt, dann verengte auf den Abschnitt nach der aktuellen Zeile und nennt es wieder:
(defun delete-trailing-whitespace-except-current-line ()
(interactive)
(let ((begin (line-beginning-position))
(end (line-end-position)))
(save-excursion
(when (< (point-min) begin)
(save-restriction
(narrow-to-region (point-min) (1- begin))
(delete-trailing-whitespace)))
(when (> (point-max) end)
(save-restriction
(narrow-to-region (1+ end) (point-max))
(delete-trailing-whitespace))))))
Setzen Sie diese Funktion auf Ihrem before-save-hook
statt delete-trailing-whitespace
.
Andere Tipps
Dieser Wrapper für delete-trailing-whitespace
verwendet werden können, zu tun, was Sie wollen:
(defun delete-trailing-whitespace-except-current-line ()
"do delete-trailing-whitespace, except preserve whitespace of current line"
(interactive)
(let ((current-line (buffer-substring (line-beginning-position) (line-end-position)))
(backward (- (line-end-position) (point))))
(delete-trailing-whitespace)
(when (not (string-equal (buffer-substring (line-beginning-position) (line-end-position))
current-line))
(delete-region (line-beginning-position) (line-end-position))
(insert current-line)
(backward-char backward))))
Ich lief in das gleiche Problem, und fand heraus, dass ws-Butler perfekt löst es. Es gibt einen einfachen Beispiel-Konfigurationscode:
;; autoload ws-butler on file open
(add-hook 'find-file-hook #'ws-butler-global-mode)
(setq require-final-newline t)
Ich habe einfach einen Wrapper zwei Anrufe zu tätigen, um `delete-Hinter-Leerzeichen ':
(defun modi/delete-trailing-whitespace-buffer ()
"Delete trailing whitespace in the whole buffer, except on the current line.
The current line exception is because we do want to remove any whitespace
on the current line on saving the file (`before-save-hook') while we are
in-between typing something.
Do not do anything if `do-not-delete-trailing-whitespace' is non-nil."
(interactive)
(when (not (bound-and-true-p do-not-delete-trailing-whitespace))
(delete-trailing-whitespace (point-min) (line-beginning-position))
(delete-trailing-whitespace (line-end-position) (point-max))))
(add-hook 'before-save-hook #'modi/delete-trailing-whitespace-buffer)