(重新)emacs中的编号列表(缪斯)

Der*_*unk 7 emacs elisp

假设我在emacs中有这样的文本列表:

a
b
c
...
d
Run Code Online (Sandbox Code Playgroud)

有没有办法通过选择区域为Emacs中的项目分配数字?最终结果应如下所示:

1. a
2. b
3. c
j. ...
n. d
Run Code Online (Sandbox Code Playgroud)

谢谢.

Hig*_*ark 10

我这样做的方式可能不是最优的,就是使用正则表达式搜索和替换.当然,这要求您能够定义正则表达式以匹配您想要数字的行的开头.举个例子,我会使用这样的搜索正则表达式:

\([a-z]\)
Run Code Online (Sandbox Code Playgroud)

请注意捕获括号,我们很快就会需要第一封信.和这样的替换正则表达式:

\#. \1
Run Code Online (Sandbox Code Playgroud)

哪里:

\# 是一种特殊的形式,由Emacs替换为正确的数字(尽管见下面的警告);

.写一个停止; 和

\1 写一个空格和捕获的组.

警告:Emacs会为您的物品编号0, 1, 2, ....直到有人发帖告诉我们如何从1开始,我总是在编辑之前插入一个虚拟的第0个元素,然后删除它.

  • 如果您使用`\,(1+ \#).`替换将从一个开始.您现在可以在替换中使用任意lisp表达式,因此只需要用1加上匹配编号替换. (2认同)

Rob*_*loi 6

您可以使用Emacs键盘宏计数器.

  • 将光标放在列表上方一行.

  • 启动一个宏: F3

  • 插入计数器值:C-x C-k C-i.将出现0

  • 插入DOT和空格: .

  • 将光标移动到下一行

  • 停止宏: F4

  • 选择你的清单

  • M-x apply-macro-to-region-lines

  • 你可以删除你在顶部添加的0并享受:)

注意:这将创建一个编号列表.它不会使用字母.


hax*_*ney 5

更简单的方法是使用CUA库的高级矩形编辑命令.CUA包含在Emacs中(至少23.1,我认为它也在早期版本中),因此没有任何新代码可以获得.

您可以使用cua-set-rectangle-mark(默认情况下绑定到C-Return)来启动矩形,然后使用它cua-sequence-rectangle来插入递增值.它还可以控制格式和起始值,因此具有很大的灵活性.

另外,CUA主要用于使Emacs更像标准文本编辑器(Cc用于复制,Cv用于粘贴等),但它还包括一些不相关的细节,如矩形编辑.不要问我为什么:).如果你想在不启用CUA键绑定的情况下使用矩形编辑(这就是我的工作),设置cua-enable-cua-keysnil,可以通过自定义完成.


Jür*_*zel 3

(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)))
Run Code Online (Sandbox Code Playgroud)