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?

War es hilfreich?

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)
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top