如何在 Vim 中将行号添加到行的范围?

如何将行号添加到在 Vim 中打开的文件中的行范围?不像在 :set nu中ーー这只是 展示行号ーー而是实际上在文件中的每一行前面都加上了这些行号?

33566 次浏览

cat -n将行号添加到其输入中。您可以将当前文件通过管道传送到 cat -n,并将当前缓冲区替换为它打印到 stdout 的内容。幸运的是,这个复杂的解决方案在 vim 中只有不到10个字符:

 :%!cat -n

或者,如果你只想要一个子选择,直观地选择区域,然后输入:

 :!cat -n

它会自动把视觉选择标记放进去,并且在你输入之后看起来像这样:

 :'<,'>!cat -n

为了擦除行号,我建议使用 control-v,它允许您直观地选择一个矩形,然后您可以使用 x删除该矩形。

在类 Unix 的环境中,您可以使用 cat 或 awk 轻松地生成一个行号,因为 vim 与 shell 有一个友好的界面,所以在 vim 中的所有工作都与在 shell 中一样。
来自 Vim Tip28:

:%!cat -n

或者

:%!awk '{print NR,$0}'

但是,如果在 MS-DOS 中使用 win9x、 win2000的 vim,就会丢失这些工具包。 这里有一个非常简单的方法,只通过 vim 对其进行存档:

fu! LineIt()
exe ":s/^/".line(".")."/"
endf

或者,一个由字母表组成的序列就像上面一样简单:

exe "s/^/".nr2char(line("."))."/"

您还可以使用 subst:

:g/^/exe ":s/^/".line(".")."^I/"

您还可以只打印行而不将它们添加到文件中:

“有时候,编辑大型源文件来打印纸上的行号特别有用。
要做到这一点,您可以使用选项 :set printoptions=number:y来激活和 :set printoptions=number:n来停用这一功能。
如果行号应该总是打印,请将行 set printoptions=number:y放在 vimrc中。”

在 GNU 系统上: 使用外部 nl二进制:

:%!nl

:%s/^/\=line('.')/

编辑: 总结评论。

这个命令可以根据您的需要进行调整。


假设您希望在视觉选择(V + move)的行前添加数字,并且希望编号从42开始。

:'<,'>s/^/\=(line('.')-line("'<")+42)/

如果您想在数字和行中的旧文本之间添加一个字符串,只需将其连接(在 VimL 中使用 .)到数字表达式:

:'<,'>s/^/\=(line('.')-line("'<")+42).' --> '/

如果你需要这个排序为文本,你可能想要零垫的结果,这可以做到使用 printf0001, 0002... 而不是 1, 2... 例如:

:%s/^/\=printf('%04d', line('.'))/

无论如何,如果你想要更多的信息,只要打开 vim 帮助: :h :s和按照链接(|subreplace-special|,... ,|submatch()|)

“ VisIncr”插件适合插入一般的递增数字列(或字母、日期、罗马数字等)。您可以控制数字格式、填充等。因此,在每一行前面(通过 :s:g或 Visual-block insert)插入一个“1”,在 Visual-block 模式下突出显示该列,并从插件运行其中一个命令。

首先,如果需要,可以删除现有的行号:

:%s/^[0-9]*//

然后,您可以添加行号。NR指的是从1开始的当前行号,因此您可以对它进行一些计算,以获得所需的编号。下面的命令给出了四位数字的行号:

:%!awk '{print 1000+NR*10,$0}'

如果有人想在使用 这个绝妙的答案插入行号之后放置一个选项卡(或一些空格) ,这里有一个方法。进入逃生模式后,应:

:%s/^/\=line('.').'    '/

^表示一行的开头,%s是替换的指令。所以,我们说在每一行的开头放一个行号,然后给它加4个空格,然后在替换之前放上行的内容,对文件中的所有行都这样做。

这将自动替换它。或者,如果你想要命令向你确认,那么做:

:%s/^/\=line('.').'    '/igc

P.S: 功率 Vim:)

最好的答复是在 重复的问题中完成的。

总之:
CTRL-V然后 G I 0 你可以插入一列零。

然后选择整个列并递增:
CTRL-V g CTRL-A

参见: https://vim.fandom.com/wiki/Making_a_list_of_numbers#Incrementing_selected_numbers