Мне очень нравится макрос Криса Конвея, но он работает только после того, как вы вручную разбиваете каждое предложение. Я ленивый парень, поэтому хочу, чтобы emacs сделал это для меня. Этим утром я наконец сел и изучил проблему. Решение, которое я имею сейчас, состоит в том, чтобы взломать встроенный макрос fill-region-as-paragraph
.
После применения следующего хака новая опция newline-after-sentence
будет установлена в значение true. Стандартный M-q
(fill-paragraph
) автоматически заполнит и создаст разрывы строк между предложениями. Обратите внимание, что тесты выполняются только с GNU Emacs 23.3.1 & mdash; используйте его на свой страх и риск.
Полный макрос длинный, поэтому я не буду публиковать его здесь. Идея состоит в том, чтобы добавить следующие циклы в fill-region-as-paragraph
...
;; Insert a line break after each sentence
(while (< (point) to)
(forward-sentence)
(if (< (point) to) (fill-newline)))
;; This is the actual filling loop.
(goto-char from)
(let (sentbeg sentend)
(while (< (point) to)
(setq sentbeg (point))
(end-of-line)
(setq sentend (point))
(fill-one-line sentbeg sentend justify) ;; original filling loop
(forward-line)))))
...
Полный макрос можно найти в моем репозитории git . Некоторые подробности также написаны в моем блоге . Если вы не хотите читать мой плохой английский, вы можете просто использовать
$ curl http://fermi.mycloudnas.com/cgit.cgi/fill/plain/hack.el >> ~/.emacs
, чтобы добавить хак к вашему ~/.emacs
и попробовать. Все комментарии и сообщения об ошибках приветствуются.