有没有一种使用 vim 降价编辑编号列表的简单方法?

Is there a simple way to edit a numbered list using vim markdown?

假设我在 markdown 中有一个这样的编号列表:

1. This is a line of text.
2. This is a line of text.
3. This is a line of text.
4. This is a line of text.

有没有一种简单的方法可以使用 vim 为第一行插入一个新行并向所有其他行添加一个?这就是我想要实现的目标:

1. This is a new line of text.
2. This is a line of text.
3. This is a line of text.
4. This is a line of text.
5. This is a line of text.

我希望能够快速完成此操作 - 例如不必录制宏。

  • This: 从第一行开始 V4j 选择这些行后,您可以使用下面的命令:

:'<,'>s/\d/\=submatch(0)+1/ | normal! goO1. This is a new line of text.

  • 或: 将光标放在第一行并键入:

O0。这是一个新的文本行。Esc0Ctrl-v 4jCtrl-a


O : 大写字母 o (shift+o)

0 : 数字 0

有几种方法可以做到这一点。可能最简单的方法是添加一个以“0.”开头的换行符。然后,当您对这个列表感到满意时,您可以使用 vG<C-a> 递增每个数字。 (当然,这不是整个缓冲区,您可以使用不同的移动,例如 ip}

如果您要多次添加一行,完成编辑后将所有数字添加到末尾可能会更容易。这可以通过视觉 selecting 你想要的行并做 g<C-a>.

来完成

我不记得这些功能是什么时候添加的,但这需要相对较新的 vim 版本。它适用于 8,我记得它适用于 7.4,带有正确的补丁。

如果您使用的是 vim 的旧版本,您可以 select 您想要的行并使用替换命令添加适当的数字。例如:

:s/^/\=(line('.') - line("'<") + 1).'. '

完全不同的方法是完全不用担心手动编号。 Markdown doesn't care what numbers are in your source file,所以

1. Foo
1. Bar
1. Baz

呈现为

  1. 巴兹

我通常用 1. 对所有有序列表进行编号,让 Markdown 处理器处理实际编号。