如何在vim的行范围中添加行号?不像“:set nu” - 这只显示数字,但不会将它们添加到文件中。
答案 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 的力量:)