有人可以帮我进一步定义我的组织大纲清理功能。我希望在以 开头的每个大纲标题之间有一个空行**
,同时考虑到这两种可能性——即,可能没有空行(这意味着我们需要插入一个);并且,可能有太多的空行(这意味着我们需要删除多余的行)。没有空行(我们需要插入一个)的情况是函数中缺少的。
大纲可能有好几级深,没有办法准确预测大纲部分的结尾会是什么,所以我们只需要关注标题开头的模式来定义功能——例如,如果只有\n[*][*]
, 但不是\n\n[*][*]
, 然后插入\n
.
(defun lawlist-cleanup ()
"If there are no blank lines preceding an outline heading `**`, then insert one
blank line. If there are more than one blank line, then delete the extras."
(interactive)
(beginning-of-buffer)
(save-excursion
(while (re-search-forward "\n\n\n[*][*]" nil t)
(left-char 3)
(delete-blank-lines))))
编辑:这是基于 juanleon 和 Bruce Connor 提供的慷慨帮助的更新功能。它处理第一级和第二级标题的情况,第一级标题有一个额外的空白行。
(defun lawlist-cleanup-second-draft ()
(interactive)
(save-excursion
(replace-regexp "\n+\\*\\* " "\n\n** " nil (point-min) (point-max))
(replace-regexp "\n+\\* " "\n\n\n* " nil (point-min) (point-max))))