繁体   English   中英

如何将行号添加到 Vim 中的行范围?

[英]How to add line numbers to range of lines in Vim?

如何将行号添加到在 Vim 中打开的文件中的一系列行中? 不像:set nu那样——这只是显示行号——但实际上是否将它们添加到文件中的每一行之前?

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

编辑:总结评论。

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


假设您想在视觉选择( V + move)的行前添加数字,并且您希望编号从 42 开始。

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

如果要在数字和行中的旧文本之间添加 string,只需将其连接(在 VimL 中使用. )到数字表达式:

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

如果您需要将其作为文本排序,您可能需要对结果进行零填充,这可以使用printf来完成0001, 0002 ... 而不是1, 2 ... 例如:

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

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

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

 :% cat -n

或者,如果您只想要一个子选择,可视化 select 该区域,然后输入:

 : cat -n

这将自动放入视觉选择标记,并在您输入后看起来像这样:

 :'<,'> cat -n

为了删除行号,我建议使用control-v ,这将允许您在视觉上 select 一个矩形,然后您可以使用x删除该矩形。

在 GNU 系统上:使用外部nl二进制文件:

 :% nl

With Unix-like environment, you can use cat or awk to generate a line number easily, because vim has a friendly interface with shell, so everything work in vim as well as it does in shell.
Vim Tip28

 :% cat -n

或者

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

但是,如果您在 Win9x、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中。"

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

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

然后,您可以添加行号。 NR指的是从一开始的当前行号,因此您可以对其进行一些数学运算以获得您想要的编号。 以下命令为您提供四位数的行号:

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

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

如果有人想在使用这个出色的答案插入行号后放置一个制表符(或一些空格),这是一种方法。 进入逃生模式后,执行:

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

^表示行首, %s是替换指令。 因此,我们说在每行的开头放置一个行号并添加 4 个空格,然后在替换之前放置该行的任何内容,并对文件中的所有行执行此操作。

这将自动替换它。 或者,如果您希望命令要求您确认,请执行以下操作:

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

PS: vim的电源:)

最好的答复是在重复的问题中完成。

总之:
CTRL-V然后G I 0你可以插入一列零。

然后 select 整列并递增:
CTRL-V g CTRL-A

另见: https://vim.fandom.com/wiki/Making_a_list_of_numbers#Incrementing_selected_numbers

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM