如何在Vim中打开的文件中为一系列行添加行号?与:set nu不同I-它只是 * 显示 * 行号--但实际上是将它们添加到文件中的每一行之前?
:set nu
nsc4cvqm1#
与
:%s/^/\=line('.')/
编辑:总结评论。此命令可以根据需要进行任意调整。假设您要在可视选择(V + move)中的行前面添加数字,并且希望编号从42开始。
V
:'<,'>s/^/\=(line('.')-line("'<")+42)/
如果你想在数字和该行的旧文本之间添加一个字符串,只需将其连接到数字表达式中(在VimL中使用.):
.
:'<,'>s/^/\=(line('.')-line("'<")+42).' --> '/
如果您需要将其作为文本进行排序,则可能需要对结果进行零填充,这可以通过使用printf for 0001, 0002 ...而不是1, 2 ...来完成,例如:
printf
0001, 0002
1, 2
:%s/^/\=printf('%04d', line('.'))/
无论如何,如果你想了解更多信息,只要打开vim帮助::h :s,并按照链接(|subreplace-special|、...、|submatch()|)
:h :s
|subreplace-special|
|submatch()|
wlsrxk512#
cat -n将行号添加到其输入中。您可以将当前文件通过管道传输到cat -n,并将当前缓冲区替换为输出到stdout的内容。幸运的是,这个复杂的解决方案在vim中不到10个字符:
cat -n
:%!cat -n
或者,如果只需要部分选取,请以视觉方式选取区域,然后输入:
:!cat -n
这将自动放置可视选择标记,在您键入后,它将如下所示:
:'<,'>!cat -n
为了擦除行号,我建议使用control-v,这将允许您可视地选择一个矩形,然后您可以使用x删除该矩形。
control-v
x
mu0hgdu03#
在GNU系统上:使用外部nl二进制:
nl
:%!nl
t2a7ltrp4#
在类Unix环境下,可以使用cat或awk轻松地生成行号,因为vim与shell之间有一个友好的接口,所以一切在vim中都和在shell中一样好用。从Vim Tip28开始:
或
:%!awk '{print NR,$0}'
但是,如果你使用vim在MS-DOS,的win 9 x,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:y行置于vimrc”中。
:set printoptions=number:y
:set printoptions=number:n
set printoptions=number:y
vimrc
eulz3vhy5#
首先,如果需要执行以下操作,可以删除现有的行号:
:%s/^[0-9]*//
然后,您可以添加行号。NR表示当前行号,从1开始,因此您可以对它进行一些数学运算以获得所需的编号。以下命令为您提供四位数的行号:
NR
:%!awk '{print 1000+NR*10,$0}'
2g32fytz6#
"VisIncr"插件非常适合插入递增的数字列(或者字母、日期、罗马数字等)。你可以控制数字格式、填充等等。所以在每一行前面插入一个“1”(通过:s或:g或visual-block insert),在visual-block模式下突出显示该列,然后运行插件中的一个命令。
:s
:g
b91juud37#
如果有人想在使用this excellent answer插入行号后添加一个制表符(或一些空格),这里有一个方法。进入转义模式后,执行以下操作:
:%s/^/\=line('.').' '/
^表示一行的开头,%s是替换指令,所以我们说在每一行的开头加上一个行号,然后加上4个空格,然后把行的内容放在替换之前,对文件中的所有行都这样做。这将自动替换它。或者,如果您希望命令要求您确认,请执行以下操作:
^
%s
:%s/^/\=line('.').' '/igc
附言:vim的力量:)
qyyhg6bp8#
最好的回答是在duplicate question中完成的。总而言之:CTRL-V,然后GI0您可以插入一列零。然后选择整列并递增:CTRL-Vg CTRL-A另请参阅:https://vim.fandom.com/wiki/Making_a_list_of_numbers#Incrementing_selected_numbers
CTRL-V
G
I
0
g CTRL-A
8条答案
按热度按时间nsc4cvqm1#
与
编辑:总结评论。
此命令可以根据需要进行任意调整。
假设您要在可视选择(
V
+ move)中的行前面添加数字,并且希望编号从42开始。如果你想在数字和该行的旧文本之间添加一个字符串,只需将其连接到数字表达式中(在VimL中使用
.
):如果您需要将其作为文本进行排序,则可能需要对结果进行零填充,这可以通过使用
printf
for0001, 0002
...而不是1, 2
...来完成,例如:无论如何,如果你想了解更多信息,只要打开vim帮助:
:h :s
,并按照链接(|subreplace-special|
、...、|submatch()|
)wlsrxk512#
cat -n
将行号添加到其输入中。您可以将当前文件通过管道传输到cat -n
,并将当前缓冲区替换为输出到stdout的内容。幸运的是,这个复杂的解决方案在vim中不到10个字符:或者,如果只需要部分选取,请以视觉方式选取区域,然后输入:
这将自动放置可视选择标记,在您键入后,它将如下所示:
为了擦除行号,我建议使用
control-v
,这将允许您可视地选择一个矩形,然后您可以使用x
删除该矩形。mu0hgdu03#
在GNU系统上:使用外部
nl
二进制:t2a7ltrp4#
在类Unix环境下,可以使用cat或awk轻松地生成行号,因为vim与shell之间有一个友好的接口,所以一切在vim中都和在shell中一样好用。
从Vim Tip28开始:
或
但是,如果你使用vim在MS-DOS,的win 9 x,win2000,你失去了这些工具包.这里是一个非常简单的方法来存档这只由vim:
或者,用字母表组成的序列就像上面一样简单:
您也可以使用subst:
您也可以只打印这些行,而不将它们添加到文件中:
“有时它可能是有用的,特别是在编辑大型源文件时,将行号打印在纸上。
为此,您可以使用选项
:set printoptions=number:y
来激活此功能,使用:set printoptions=number:n
来停用此功能。如果始终打印行号,请将
set printoptions=number:y
行置于vimrc
”中。eulz3vhy5#
首先,如果需要执行以下操作,可以删除现有的行号:
然后,您可以添加行号。
NR
表示当前行号,从1开始,因此您可以对它进行一些数学运算以获得所需的编号。以下命令为您提供四位数的行号:2g32fytz6#
"VisIncr"插件非常适合插入递增的数字列(或者字母、日期、罗马数字等)。你可以控制数字格式、填充等等。所以在每一行前面插入一个“1”(通过
:s
或:g
或visual-block insert),在visual-block模式下突出显示该列,然后运行插件中的一个命令。b91juud37#
如果有人想在使用this excellent answer插入行号后添加一个制表符(或一些空格),这里有一个方法。进入转义模式后,执行以下操作:
^
表示一行的开头,%s
是替换指令,所以我们说在每一行的开头加上一个行号,然后加上4个空格,然后把行的内容放在替换之前,对文件中的所有行都这样做。这将自动替换它。或者,如果您希望命令要求您确认,请执行以下操作:
附言:vim的力量:)
qyyhg6bp8#
最好的回答是在duplicate question中完成的。
总而言之:
CTRL-V
,然后G
I
0
您可以插入一列零。然后选择整列并递增:
CTRL-V
g CTRL-A
另请参阅:https://vim.fandom.com/wiki/Making_a_list_of_numbers#Incrementing_selected_numbers