【发布时间】:2013-07-03 15:27:39
【问题描述】:
谁能帮我进一步定义我的组织大纲清理功能。我希望在以** 开头的每个大纲标题之间有一个空行,考虑到这两种可能性——即,可能没有空行(这意味着我们需要插入一个);并且,可能有太多的空行(这意味着我们需要删除多余的)。没有空行的情况(我们需要插入一个)是函数中缺少的。
大纲可能有好几个层次,没有办法准确预测大纲部分的结尾会是什么,所以我们只需要关注标题开头的模式来定义功能——例如。 ,如果只有\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))))
【问题讨论】: