То, что вы описали, не требует для того, что обычно называется регулярным выражением поиск в Emacs. Он вызывает сопоставление регулярного выражения в конце буфера (eob). Я отредактировал название вопроса и текст соответственно.
Для этого вы просто временно переходите к концу буфера и используете looking-back
, чтобы проверить соответствие регулярного выражения.
(defun delete-abc-SPC-<-3-newlines()
"Delete `abc ' followed by up to 2 newlines at eob."
(interactive)
(let ((ends-w-<-3-newlines nil))
(save-excursion
(goto-char (point-max))
(setq ends-w-<-3-newlines (looking-back "abc \n?\n?\n?")))
(when ends-w-<-3-newlines
(delete-region (match-beginning 0) (match-end 0)))))
Если вы хотите, чтобы буфер не будет рассматриваться вновь модифицирована затем использовать это:
(defun delete-abc-SPC-<-3-newlines()
"Delete `abc ' followed by up to 2 newlines at eob."
(interactive)
(let ((ends-w-<-3-newlines nil)
(mod-buf (buffer-modified-p)))
(save-excursion
(goto-char (point-max))
(setq ends-w-<-3-newlines (looking-back "abc \n?\n?\n?")))
(when ends-w-<-3-newlines
(delete-region (match-beginning 0) (match-end 0)))
(set-buffer-modified-p mod-buf)))
Описывает ли связь с записью Xah Lee о '\ ''? http://ergoemacs.org/emacs/emacs_regex_begin_end_line_string.html – lawlist
@lawlist Хороший совет для использования '\ ''! Я не знал об этом. – halloleo