计算组织标题

问题描述

我想从以下位置计算组织标题

* heading how
* heading are
* heading you

* 1.heading how
* 2.heading are
* 3.heading you

所以我把 numerate-org-heading 写成:

(defun numerate-org-heading (args)
  "Numerate org headings"
  (interactive "s")
  (let ((count 0))
    (while (re-search-forward args nil t)
      (setq count (1+ count))
      (replace-match (concat "\1" (string count)
                             (forward-char 1))))))

不幸的是,当我以交互方式调用 Wrong type argument: stringp,^* 并用字符串“^*”馈送它时,它报告 numerate-org-heading 错误

你能给出解决问题的任何提示吗?


修改函数,现在它适用于特定情况:

(defun numerate-org-heading (args)
  "Numerate org headings"
  (interactive "s")
  (let ((count 0))
    (while (re-search-forward args nil t)
      (setq count (1+ count))
      (replace-match (concat "* " (number-to-string count) ".")
                     (forward-char 1))))))

解决方法

如果您将 args 设置为匹配组并捕获任何尾随空格,您可以将其替换为组 1 ("\\1"),后跟您的编号,例如1.

(defun numerate-org-heading (args)
  "Numerate org headings"
  (interactive "s")
  (let ((count 0))
    (while (re-search-forward (concat "\\(" args "[ \\t]*\\)") nil t)
      (setq count (1+ count))
      (replace-match (concat "\\1" (number-to-string count) ".")))))