Поскольку delete-trailing-whitespace
учитывает сужение, одно из решений состоит в том, чтобы сузить буфер до части до текущей строки и вызвать ее, затем сузить до части после текущей строки и позвони еще раз:
(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))))))
Поместите эту функцию на before-save-hook
вместо delete-trailing-whitespace
.