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' Version: 2020-12-02 2023-05-25 2023-11-09" (interactive) (let (xp1 xp2) (let ((xbds (xah-get-bounds-of-block-or-region))) (setq xp1 (car xbds) xp2 (cdr xbds))) (save-restriction (narrow-to-region xp1 xp2) (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 :move) (set-transient-map (let ((xkmap (make-sparse-keymap))) (define-key xkmap (or xah-repeat-key (kbd "DEL")) this-command) xkmap)) (set-transient-map (let ((xkmap (make-sparse-keymap))) (define-key xkmap (kbd "DEL") this-command) xkmap)))
requires package Emacs: xah-get-thing.el