假设我在emacs中有一个文本列表,如下所示:
a
b
c
...
d有没有一种方法可以通过选择区域来为Emacs中的这些项分配编号?最终结果应如下所示:
1. a
2. b
3. c
j. ...
n. d谢谢。
发布于 2010-04-09 23:38:25
(defun number-region (start end)
(interactive "r")
(let* ((count 1)
(indent-region-function (lambda (start end)
(save-excursion
(setq end (copy-marker end))
(goto-char start)
(while (< (point) end)
(or (and (bolp) (eolp))
(insert (format "%d. " count))
(setq count (1+ count)))
(forward-line 1))
(move-marker end nil)))))
(indent-region start end)))发布于 2010-04-09 21:56:19
我的方法是使用正则表达式搜索和替换,这可能不是最优的。当然,这要求您能够定义一个正则表达式来匹配您想要编号的行的开头。以您的示例为例,我将使用如下搜索正则表达式:
\([a-z]\)注意捕获括号,我们很快就需要第一个字母了。替换正则表达式,如下所示:
\#. \1其中:
\#是一种特殊的形式,它被Emacs替换为正确的数字(尽管参见下面的警告);
.写了一个停顿;
\1写入一个空格和捕获的组。
警告: Emacs会将您的项目编号为0, 1, 2, ...。直到有人发帖告诉我们如何从1开始,我总是在编辑前插入一个虚拟的第0个元素,然后删除它。
发布于 2010-04-09 22:39:42
您可以使用the Emacs Keyboard Macro Counter。
将光标放在列表上方一行。启动宏:F3
C-x C-k C-i。此时将出现0,并插入点号和空格:F4. F4M-x apply-macro-to-region-lines.0.:)
注意:这将创建一个编号列表。它不会使用字母。
https://stackoverflow.com/questions/2607925
复制相似问题