假设我在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个元素,然后删除它.
您可以使用Emacs键盘宏计数器.
将光标放在列表上方一行.
启动一个宏: F3
插入计数器值:C-x C-k C-i.将出现0
插入DOT和空格: .
将光标移动到下一行
停止宏: F4
选择你的清单
M-x apply-macro-to-region-lines
你可以删除你在顶部添加的0并享受:)
注意:这将创建一个编号列表.它不会使用字母.
更简单的方法是使用CUA库的高级矩形编辑命令.CUA包含在Emacs中(至少23.1,我认为它也在早期版本中),因此没有任何新代码可以获得.
您可以使用cua-set-rectangle-mark(默认情况下绑定到C-Return)来启动矩形,然后使用它cua-sequence-rectangle来插入递增值.它还可以控制格式和起始值,因此具有很大的灵活性.
另外,CUA主要用于使Emacs更像标准文本编辑器(Cc用于复制,Cv用于粘贴等),但它还包括一些不相关的细节,如矩形编辑.不要问我为什么:).如果你想在不启用CUA键绑定的情况下使用矩形编辑(这就是我的工作),设置cua-enable-cua-keys为nil,可以通过自定义完成.
(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)