题
如何在vim的行范围中添加行号?不像在“:set nu”中那样 - 这只显示数字,但不会将它们添加到文件中。
解决方案
使用
:%s/^/\=line('.')/
编辑:总结评论。
可以根据需要调整此命令。
假设您要在视觉选择( V
+ move)的行前添加数字,并且您希望编号从42开始。
:'<,'>s/^/\=(line('.')-line("'<")+42)/
如果你想在行中的数字和旧文本之间添加一个字符串,只需将其连接(使用VimL中的。
),就可以使用数字表达式:
:'<,'>s/^/\=(line('.')-line("'<")+42).' --> '/
如果你需要这个作为文本排序,你可能想要填充结果,这可以使用 printf
为 0001,0002
...而不是 1,2
...例如:
:%s/^/\=printf('%04d', line('.'))/
无论如何,如果你想了解更多信息,只需打开vim help::h:s
并点击链接( | subreplace-special |
,...,<代码> |子匹配()| 代码>)
其他提示
cat -n
在其输入中添加行号。您可以将当前文件传递给 cat -n
,并将当前缓冲区替换为打印到stdout的内容。幸运的是,这个复杂的解决方案在vim中只有不到10个字符:
:%!cat -n
或者,如果您只想要一个子选择,请直观地选择该区域,然后输入:
:!cat -n
这将自动将视觉选择标记放入,并在您输入后显示如下:
:'<,'>!cat -n
为了删除行号,我建议使用 control-v
,这将允许您直观地选择一个矩形,然后可以使用 x
删除该矩形
在GNU系统上:使用外部 nl
二进制文件:
:%!nl
使用类Unix环境,你可以使用cat或awk轻松生成一个行号,因为vim与shell有一个友好的接口,所以一切都在vim中工作,也在shell中工作。
来自 Vim Tip28 :
:%!cat -n
或
:%!awk '{print NR,fu! LineIt()
exe ":s/^/".line(".")."/"
endf
}'
但是,如果你在win-x,win2000的MS-DOS中使用vim,你会丢失这些工具包。 这是一个非常简单的方法来存档这个只有vim:
exe "s/^/".nr2char(line("."))."/"
或者,用字母组成的序列就像上面一样简单:
:g/^/exe ":s/^/".line(".")."^I/"
您也可以使用subst:
<*>您也可以只打印行而不将其添加到文件中:
“有时特别是编辑大型源文件以在纸上打印行号可能会有用。” 为此,您可以使用选项
:set printoptions = number:y
来激活和:set printoptions = number:n
来停用此功能。
如果应始终打印行号,请将set printoptions = number:y
行放在vimrc
中。
首先,如果需要,您可以删除现有的行号:
:%s/^[0-9]*//
然后,您可以添加行号。 NR
是指从1开始的当前行号,因此您可以对其进行一些数学计算以获得所需的编号。以下命令为您提供了四位数的行号:
:%!awk '{print 1000+NR*10,<*>}'
“VisIncr”插件适合插入列一般增加数字(或字母,日期,罗马数字等)。您可以控制数字格式,填充等。所以插入一个“1”。在每一行的前面(通过:s
或:g
或visual-block insert),在可视块模式下突出显示该列,并运行其中一个命令插件。
如果有人想在使用这个优秀的答案插入行号后放置一个标签(或一些空格),这是一种方式。进入转义模式后,执行:
:%s/^/\=line('.').' '/
^
表示行的开头,%s
是替换的指令。因此,我们说在每行的开头添加一个行号并为其添加4个空格,然后在替换之前放置该行的内容,并对文件中的所有行执行此操作。
这会自动替换它。或者,如果您希望命令要求您确认,请执行以下操作:
:%s/^/\=line('.').' '/igc
P.S: vim的力量:)