如何在 Vim 中在现有文本上写入一列连续整数?

如何在 Vim 中在现有文本上写入一列连续整数?

例如,假设我有以下文本:

/ apple
/ orange
/ banana
/ bread

如何有效地将连续整数添加到列中?

/1 apple
/2 orange
/3 banana
/4 bread

请注意,在实际问题中,列表可能有 20 行、50 行或更多行长。

答案1

一种想法是使用 的vim宏功能。将光标置于/中的第一个位置/ apple,然后执行以下操作:

a1<Esc>

插入第一个数字来开始一切(<Esc>作为退出键)。然后将光标放在新插入的 上1,录制宏(到 slot 中q):

qqyiwj0p<C-a>q

现在您应该对前两行进行了编号。您现在可以运行宏n-2次数,其中n是您拥有的总行数。例如,如果您有 50 行,我们会运行宏 48 次,因为我们已经手动填写了 2 行:

48@q

答案2

您可以使用 vim 的“通过外部命令进行管道传输”功能。在 vim 中打开文件,然后执行以下操作:

:%!cat -n | awk '{print $2, $1, $3;}' | sed 's/ //'

您可能可以通过巧妙的 awk 代码省去 sed (它只是删除每行中的第一个空格)。我无法在 30 秒内让它工作,所以我就用 sed 了。

相关内容