2008-10-31 47 views

回答

102

随着

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

编辑:总结评论。

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


比方说,你想从一个目测可供选择(V +移动)的行前加数字,要编号开始在42

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

如果您想要在行和行之间添加一个字符串,只需连接(与VimL中的.)它与数字表达式:

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

如果您需要此排序为文本,你可能要填零的结果,可使用printf0001, 0002做...而不是1, 2 ...如:

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

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

32

cat -n添加行号的输入。您可以将当前文件传输到cat -n,并将当前缓冲区替换为输出到stdout的内容。好在这个复杂的解决方案是在vim少于10个字符:

:%!cat -n 

或者,如果你想只是部分选定,直观地选择该地区,并输入:

:!cat -n 

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

:'<,'>!cat -n 

为了擦除的行号,我建议使用control-v,这将使你可以直观地选择一个矩形,然后你可以用x删除那个矩形。

+0

如果你想让行号从0开始而不是1? – Nils 2011-05-11 08:34:16

+0

删除第一行,为其余的编号。之后以首位'0'读取第一行。 ;) – sjas 2012-07-20 08:13:13

+0

这就是答案! – user3751385 2017-07-28 04:27:15

5

使用类似于UNIX的环境中,你可以使用cat或awk来容易产生行号,因为Vim与外壳界面友好,所以一切工作的vim,以及它在外壳。
Vim Tip28

:%!cat -n 

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

但是,如果你在MS-DOS使用vim,WIN9X,WIN2000,你亏这些工具包。 这里只有通过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:yvimrc

+0

在第一个例子中,您是不是指“猫”而不是“呼叫”? – 2011-01-12 19:02:17

19

在一个GNU系统:与外部nl二进制:

:%!nl 
3

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

4

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

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

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

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