如何在 EMACS 中给定文本的每一行后添加两个空格?

How can I add two spaces after each line on a given text in EMACS?

寻求如何在 EMACS 中给定文本缓冲区的每一行后添加两个空格。

这是一种通过 org-mode 在 EMACS 导出时添加换行符的方法。

首先,确保您(或您安装的某些软件包)没有在挂钩上添加 delete-trailing-whitespace。默认情况下它不在任何挂钩上,但是将它添加到 before-save-hook 是相当常见的。

又快又脏:

C-M-< C-M-% $ RET SPACE SPACE RET !

  1. 这将转到缓冲区的开头 (C-M-<),
  2. 开始 query-replace-regexp (C-M-%),
  3. 用两个 space 和
  4. 替换行尾 ($)
  5. 将其应用于每场比赛 (!)。

以上,RET表示按下return键,SPACE表示按下space键。将 $ 替换为 [^ ][^ ]$ 并将 SPACE SPACE 替换为 \& SPACE SPACE 以仅适用于以少于两个 space 结尾的行(这也会使操作幂等) . \& 表示整个匹配的字符串(在本例中为最后两个字符)。


函数:

(defun ensure-trailing-spaces ()  
  "Ensure there are two spaces at the end of every line."
  (interactive "*")
  (save-excursion
    (goto-char (point-min))
    (while (not (eobp))
      (end-of-line)
      (unless (looking-back "  $")
        (insert "  "))
      (forward-line))))

请注意,这无条件地在每一行的末尾插入两个 space,即使已经有一个 space,因此会有两个或三个 space在每一行的末尾。