在vim中为源代码添加行号

时间:2008-10-31 07:05:17

标签: vim line-numbers

如何在vim的行范围中添加行号?不像“:set nu” - 这只显示数字,但不会将它们添加到文件中。

7 个答案:

答案 0 :(得分:108)

使用

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

编辑:总结评论。

可以根据需要调整此命令。


假设您想要从视觉选择(V +移动)中添加行前面的数字,并且您希望编号从42开始。

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

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

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

如果您需要将其排序为文字,则可能需要对结果进行归零,这可以使用printf 0001, 0002代替1, 2来完成...例如:

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

无论如何,如果您想了解更多信息,只需打开vim帮助::h :s并点击链接(|subreplace-special|,...,|submatch()|

答案 1 :(得分:33)

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

 :%!cat -n

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

 :!cat -n

这将自动将视觉选择标记放入,并在您输入后显示如下:

 :'<,'>!cat -n

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

答案 2 :(得分:22)

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

:%!nl

答案 3 :(得分:6)

在类Unix环境中,你可以使用cat或awk轻松生成一个行号,因为vim与shell有一个友好的接口,所以一切都在vim和shell中都有效。 来自Vim Tip28

:%!cat -n

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

但是,如果你在win-x,win2000的MS-DOS中使用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中。

答案 4 :(得分:4)

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

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

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

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

答案 5 :(得分:3)

"VisIncr"插件适用于插入递增数字的列(或字母,日期,罗马数字等)。您可以控制数字格式,填充等。因此,在每行前面插入一个“1”(通过:s:g或可视块插入),在可视块模式下突出显示该列,然后运行插件中的一个命令。

答案 6 :(得分:0)

如果有人想在使用this excellent answer插入行号之后放一个制表符(或一些空格),这是一种方法。进入退出模式后,请执行以下操作:

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

^表示行首,%s是替换指令。因此,我们说在每行的开头放置一个行号,并向其添加4个空格,然后在替换之前放置该行的内容,然后对文件中的所有行执行此操作。

这将自动替换它。或者,如果您希望命令要求您确认,则请执行以下操作:

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

P.S: vim 的力量:)