Emacs: Orgmode,如何从一段文本中制作列表

22

有没有一种方法可以转换这样的一段代码块?

line1  
line2 
linen

转化为

1. line1
2. line2
n. linen

使用Emacs org mode

4个回答

46

我知道的最简短的方法是:将包括换行符的行高亮显示,

line1
line2
line3

然后执行 M-x org-ctrl-c-minus (按下 C-c -),您将会得到

- line1  
- line2 
- line3

然后运行M-x org-shiftright(按下<S-right>键)两次,就可以得到想要的结果。

1. line1  
2. line2 
3. line3

1
当我执行 C-c - 命令时,它只在第一行插入 -,而后续的行只是缩进了。 - Liam
在按下 C-c - 之前选择区域。 - SabreWolfy
使用org 7.8.06版本时,仅在所选区域的第一行插入-,而之前我使用的org版本可能因为我的评论而表现不同。 - SabreWolfy
1
使用C-u C-c -在所选区域的每行开头插入“-”符号。从Emacs的org帮助中可以了解到:“如果它是普通文本,则将区域更改为一个项目。使用前缀参数ARG,将区域中的每一行更改为一个项目。” - SabreWolfy

21

我不确定是否有直接的方法,至少我还没有听说过。但是一种方法是使用 string-rectangleC-x r t)在所有行前添加 1.,然后按下 C-c C-c 更新编号。

对于 string-rectangle,您可以按以下方式放置光标和标记:

v---mark
line1 with some text
line2 with more text
<---point

在执行 M-x: string-rectangle: 1. 命令后,你将得到:

1. line1 with some text
1. line2 with more text

按下C-c C-c会给你正确的编号!

更容易的方法是启用CUA-mode并使用C-return创建一个矩形选择,然后你可以同时在所有行上开始输入。参见youtube上的这个视频


请务必查看CUA矩形(如emacs-fu中所述),它们比普通矩形更易于使用。但是,对于上述问题,使用矩形是最好的解决方案 :) - monotux

6
请参见org-toggle-item,以将其转换为普通文本列表或编号列表。

只给我一个无序列表。虽然还是有用的。 - ijoseph
真的,但是从那里开始(现在是一个无序列表),将光标放在任何一行上,使用 C-c - 循环浏览其他列表类型。 - Chip Grandits

2

在emacsworld.blogspot.com(我进行了一些小的编辑)上发现了以下内容:

在Emacs 24.1中,NEWS文件增加了矩形命令的新功能。

**新命令`C-x r N'(`rectangle-number-lines')可以给当前矩形中的每行编号。如果使用前缀参数,则提示输入计数起点和格式字符串。

这使您可以轻松地对行或列表进行编号,而无需使用宏或其他elisp函数。选择一个垂直文本区域(使用瞬时标记模式可能会有所帮助),宽度为1个字符,然后按下C-x r N即可。 Emacs会自动对行进行编号。

如果使用前缀命令C-u(例如,C-u C-x r N),它将提示您输入起始数字和格式字符串,因此您可以从任意数字开始,并指定一个括号或者周期等字符来在数字前后添加。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接