Emacs: Reformat to Sentence Lines 📜
This command breaks a long line or text block into multile lines, each line is a sentence, ending in a period.
This is useful for editing a thesis or long prose. Because it lets you clearly see the sentence structure.
put this in your Emacs Init File:
(defun xah-reformat-to-sentence-lines () "Reformat current block or selection into multiple lines by ending period. Move cursor to the beginning of next text block. After this command is called, press `xah-repeat-key' to repeat it. URL `http://xahlee.info/emacs/emacs/elisp_reformat_to_sentence_lines.html' Created: 2020-12-02 Version: 2025-03-25" (interactive) (let (xbeg xend) (seq-setq (xbeg xend) (if (region-active-p) (list (region-beginning) (region-end)) (list (save-excursion (if (re-search-backward "\n[ \t]*\n" nil 1) (match-end 0) (point))) (save-excursion (if (re-search-forward "\n[ \t]*\n" nil 1) (match-beginning 0) (point)))))) (save-restriction (narrow-to-region xbeg xend) (goto-char (point-min)) (while (search-forward "。" nil t) (replace-match "。\n")) ;; (goto-char (point-min)) (while (search-forward " <a " nil t) (replace-match "\n<a ")) ;; (goto-char (point-min)) (while (search-forward "</a> " nil t) (replace-match "</a>\n")) (goto-char (point-min)) (while (re-search-forward "\\([A-Za-z0-9]+\\)[ \t]*\n[ \t]*\\([A-Za-z0-9]+\\)" nil t) (replace-match "\\1 \\2")) (goto-char (point-min)) (while (re-search-forward "\\([,]\\)[ \t]*\n[ \t]*\\([A-Za-z0-9]+\\)" nil t) (replace-match "\\1 \\2")) (goto-char (point-min)) (while (re-search-forward " +" nil t) (replace-match " ")) (goto-char (point-min)) (while (re-search-forward "\\([.?!]\\) +\\([(0-9A-Za-z]+\\)" nil t) (replace-match "\\1\n\\2")) (goto-char (point-max)) (while (eq (char-before) 32) (delete-char -1)))) (re-search-forward "\n+" nil 1) (set-transient-map (let ((xkmap (make-sparse-keymap))) (define-key xkmap (kbd (if (boundp 'xah-repeat-key) xah-repeat-key "m")) this-command) xkmap)) (set-transient-map (let ((xkmap (make-sparse-keymap))) (define-key xkmap (kbd "DEL") this-command) xkmap)))