【问题标题】:If no blank lines preceding an outline heading `**`, then insert one blank line如果大纲标题“**”之前没有空行,则插入一个空行
【发布时间】: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))))

【问题讨论】:

    标签: emacs lisp elisp


    【解决方案1】:

    使用delete-blank-lines 的问题在于它的行为取决于点周围的空白行数。这是解决问题的一种非常不优雅的方法:

    (save-excursion
      (beginning-of-buffer)
      (while (re-search-forward "^[*][*]" nil t)
        (forward-line 0)
        (newline)
        (forward-line -1)
        (delete-blank-lines)
        (delete-blank-lines)
        (newline)
        (forward-line 1))))
    

    它有点伤我的眼睛,它看起来更像是一个宏而不是一个函数,但我认为它可以完成这项工作。

    【讨论】:

    • 我无法想象您的函数是如何工作的,但它似乎确实可以解决问题。也许这是因为我从未接受过“像程序员一样思考”的训练。我会在一天中多次尝试,看看是否有任何异常/异常,然后为您的答案打勾。非常感谢——非常感谢!
    • 我最终选择了 replace-regexp 答案,因为我对 regexp 有亲和力。然而,如果没有你的帮助,我会整天沉迷于这个功能。再次感谢您的所有帮助。 :)
    【解决方案2】:

    我认为@juanleon 的答案没有任何问题,但这是另一种应该有效的方法(只是为了展示正则表达式的力量 :-D)。

    (save-excursion 
     (replace-regexp "[ 
    ]+\\*\\* " "\n\n** " nil (point-min) (point-max)))
    

    注意:方括号内是空格和换行符。

    【讨论】:

    • 谢谢你——我会在今晚晚些时候试一试,然后发布后续内容。
    • 我将采用这个答案,唯一的变化是 \n 而不是括号中的字面硬返回,以便我可以将代码行保持在一起。我编写了与第一行类似的第二行代码,这样我就可以处理带有一个星号的标题和带有两个星号的标题。我将在原始问题下方发布更新后的代码。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-09-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多