如何将行号添加到在 Vim 中打开的文件中的行范围?不像在 :set nu中ーー这只是 展示行号ーー而是实际上在文件中的每一行前面都加上了这些行号?
:set nu
cat -n将行号添加到其输入中。您可以将当前文件通过管道传送到 cat -n,并将当前缓冲区替换为它打印到 stdout 的内容。幸运的是,这个复杂的解决方案在 vim 中只有不到10个字符:
cat -n
:%!cat -n
或者,如果你只想要一个子选择,直观地选择区域,然后输入:
:!cat -n
它会自动把视觉选择标记放进去,并且在你输入之后看起来像这样:
:'<,'>!cat -n
为了擦除行号,我建议使用 control-v,它允许您直观地选择一个矩形,然后您可以使用 x删除该矩形。
control-v
x
在类 Unix 的环境中,您可以使用 cat 或 awk 轻松地生成一个行号,因为 vim 与 shell 有一个友好的界面,所以在 vim 中的所有工作都与在 shell 中一样。 来自 Vim Tip28:
或者
:%!awk '{print NR,$0}'
但是,如果在 MS-DOS 中使用 win9x、 win2000的 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中。”
:set printoptions=number:y
:set printoptions=number:n
set printoptions=number:y
vimrc
在 GNU 系统上: 使用外部 nl二进制:
nl
:%!nl
和
:%s/^/\=line('.')/
编辑: 总结评论。
这个命令可以根据您的需要进行调整。
假设您希望在视觉选择(V + move)的行前添加数字,并且希望编号从42开始。
V
:'<,'>s/^/\=(line('.')-line("'<")+42)/
如果您想在数字和行中的旧文本之间添加一个字符串,只需将其连接(在 VimL 中使用 .)到数字表达式:
.
:'<,'>s/^/\=(line('.')-line("'<")+42).' --> '/
如果你需要这个排序为文本,你可能想要零垫的结果,这可以做到使用 printf为 0001, 0002... 而不是 1, 2... 例如:
printf
0001, 0002
1, 2
:%s/^/\=printf('%04d', line('.'))/
无论如何,如果你想要更多的信息,只要打开 vim 帮助: :h :s和按照链接(|subreplace-special|,... ,|submatch()|)
:h :s
|subreplace-special|
|submatch()|
“ VisIncr”插件适合插入一般的递增数字列(或字母、日期、罗马数字等)。您可以控制数字格式、填充等。因此,在每一行前面(通过 :s或 :g或 Visual-block insert)插入一个“1”,在 Visual-block 模式下突出显示该列,并从插件运行其中一个命令。
:s
:g
首先,如果需要,可以删除现有的行号:
:%s/^[0-9]*//
然后,您可以添加行号。NR指的是从1开始的当前行号,因此您可以对它进行一些计算,以获得所需的编号。下面的命令给出了四位数字的行号:
NR
:%!awk '{print 1000+NR*10,$0}'
如果有人想在使用 这个绝妙的答案插入行号之后放置一个选项卡(或一些空格) ,这里有一个方法。进入逃生模式后,应:
:%s/^/\=line('.').' '/
^表示一行的开头,%s是替换的指令。所以,我们说在每一行的开头放一个行号,然后给它加4个空格,然后在替换之前放上行的内容,对文件中的所有行都这样做。
^
%s
这将自动替换它。或者,如果你想要命令向你确认,那么做:
:%s/^/\=line('.').' '/igc
P.S: 功率 Vim:)
最好的答复是在 重复的问题中完成的。
总之: 与 CTRL-V然后 G I 0 你可以插入一列零。
CTRL-V
G
I
0
然后选择整个列并递增: CTRL-V g CTRL-A
g CTRL-A
参见: https://vim.fandom.com/wiki/Making_a_list_of_numbers#Incrementing_selected_numbers