Удалить лишние пустые строки в emacs

M-x flush-lines ^$ 

удаляет все пустые строки в буфере. Однако я хочу удалить лишние пустые строки, то есть, если есть n последовательных пустых строк, я хочу удалить n-1 и сохранить один.

Я знаю, что delete-blank-lines выполняет задание для пустых строк под точкой, однако мне нужно простое решение, которое работает для всего буфера.

Любые идеи, как это сделать? Особенно возможно изменить regex ^ $из моего первого примера, чтобы соответствовать только дополнительным строкам?

Ответ 1

C-x h M-x replace-regexp RET ^ C-q C-j C-q C-j + RET C-q C-j RET

который отмечает весь буфер и заменяет две или более пустых строк одной пустой строкой.

Ответ 2

C-x C-o (delete-blank-lines) делает именно это. Вам просто понадобится небольшая макромагия, чтобы запустить ее на весь буфер.

Ответ 3

Я не знаю о встроенной функции для этого, но вы можете сделать:

Только M-x для одиночных строк

(defun single-lines-only ()
  "replace multiple blank lines with a single one"
  (interactive)
  (goto-char (point-min))
  (while (re-search-forward "\\(^\\s-*$\\)\n" nil t)
    (replace-match "\n")
    (forward-char 1)))

Ответ 4

В режиме зла вы можете использовать следующее регулярное выражение:: :%s/\n\n\n//g