将行号添加到vim中的源代码

我怎样才能添加行号在vim的行范围? 不像在“:设置Nu” – 这只是显示数字,但不会将它们添加到文件。

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

编辑:总结评论。

这个命令可以根据需要调整。


假设您想从视觉select( V +移动)中添加数字,并且您希望编号从42开始。

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

如果你想添加一个string之间的数字和旧的文本,只是连接(与。in VimL)它的数字expression式:

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

如果你需要这样的文本sorting,你可能需要零填充的结果,这可以使用printf for 0001, 0002 …而不是1, 2 …例如:

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

无论如何,如果你想了解更多的信息,只需打开vim help:: :h :s并按照链接( |subreplace-special| ,…, |submatch()|

cat -n将行号添加到其input。 您可以将当前文件传输到cat -n然后用打印到stdout的内容replace当前的缓冲区。 幸运的是,这个复杂的解决scheme在vim中less于10个字符:

  :%!cat -n 

或者,如果您只需要一个子select,则直观地select该区域,然后键入以下内容:

  :!cat -n 

这会自动将视觉select标记放入,并且在键入后会看起来像这样:

  :'<,'>!cat -n 

为了擦除行号,我推荐使用control-v ,它可以让你在视觉上select一个矩形,然后用x删除那个矩形。

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

 :%!nl 

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

 :%!cat -n 

要么

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

但是,如果你在win98x,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来取消这个function。
如果要始终打印行号,请将行set printoptions=number:y放入vimrc

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

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

然后,你可以添加行号。 NR是指从当前行号开始,所以你可以做一些math来获得你想要的编号。 以下命令给你四位数的行号:

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

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