如何在vim中的行范围中添加行号?不像":set nu" - 这只显示数字,但不会将它们添加到文件中.
同
:%s/^/\=line('.')/
编辑:总结评论.
可以根据需要调整此命令.
假设您想在视觉选择(V
+移动)的行前添加数字,并且您希望编号从42开始.
:'<,'>s/^/\=(line('.')-line("'<")+42)/
如果你想在行中的数字和旧文本之间添加一个字符串,只需将它(.
在VimL中)连接到number-expression:
:'<,'>s/^/\=(line('.')-line("'<")+42).' --> '/
如果你需要这个作为文本排序,你可能想要填充结果,这可以使用printf
for 0001, 0002
...而不是1, 2
...例如:
:%s/^/\=printf('%04d', line('.'))/
无论如何,如果你想了解更多信息,只需打开vim帮助::h :s
并按照链接(|subreplace-special|
,...,|submatch()|
)
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,$0}'
但是,如果在MS-DOS中使用vim,win9x,win2000,则会丢失这些工具包.这是一个非常简单的方法来存档这个只有vim:
fu! LineIt() exe ":s/^/".line(".")."/" endf
或者,用字母表组成的序列就像上面一样简单:
exe "s/^/".nr2char(line("."))."/"
你也可以使用一个子:
:g/^/exe ":s/^/".line(".")."^I/"
您也可以只打印行而不将其添加到文件中:
"有时特别是编辑大型源文件以在纸上打印行号可能会很有用.
为此,您可以使用该选项:set printoptions=number:y
激活并:set printoptions=number:n
停用此功能.
如果应始终打印行号,请将行set printoptions=number:y
放入的vimrc
".