文章

vim 插入行号

前言

vim/nvim 可以显示行号,但是有的时候需要添加行号到文本中,这里记录一些方法

1
2
3
4
5
6
7
8
9
10
11
12
## 例如原文件:
a
b
c
d
e

## 修改后的文件:
1.a
2.b
3.c
4.d

获取行号

vim内部有内置命令如 line() 获取当前行号

1
:echo line('.')

获取所在行的行号 “.”,小数点”.”表示当前行

为当前行插入行号

可以在插入模式下使用 C-r+=line(‘.’) 插入行号

为每一行插入行号

在每一行的行首插入行号

1
2
3
:%s/^/\=line(".")/
## 通过小数点拼接分隔符,不然行号和文字直接挨着了
:%s/^/\=line(".") . '、'/

在可视 view 模式下插入行号

有的时候只需要为部分文本插入行号,可以先选中文本之后在进行操作

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

利用 g<C-a> 添加行号

如果觉得通过 line() 函数设置行号太麻烦,或者行数不多的情况下可以尝试使用 g<C-a> 的方式添加行号

首先给行首添加 0 ,或者 1

1
:%s/^/0./

也可以 <c-v><c-q> 进入块选择模式,按列选择需要加行号的位置,然后 I0 ,分格符也可以一并输入。完成后键入 ESC 就能在每行中加入0 选中要加行号的区域,执行 norm I0, (仅在每行开头加入)

之后要重新选中之前选中的区域,直接按下 gv,或者 <C-v> 重新选择行。然后键入 g<C-a> 会自动增加数字

其他办法

也可以直接使用外部工具 cat、awk 等实现

1
2
3
4
5
6
:%!cat -n   字数最少的方法    
:%s/^/\=line(".").",\t"/  最正规的方法 
:let i=0|g/^/s//\=i.','/ |let i+=1 不用函数的方法
:g/^/exec "s/^/".strpart(line(".")."   ", 0, 4)  
:g/^/exec "s/^/".line(".")."\t"
:%!awk '{print 1000+NR*10,$0}'

删除行号

添加行号之后可以按照以下方法删除行号

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

总结

最简单的方法还是直接利用 vim/nvim 自带的 line() 函数设置行号

如果在 Linux 环境也可以利用 cat、awk 外部工具

后续发现有一个帖子讨论过这个问题,可以查看这里stackoverflow

csdn上也有一些方法可以参考

本文由作者按照 CC BY 4.0 进行授权

© TheDarkStarJack. 保留部分权利。

[本站总访问量次] [本站访客数人次] [本文总阅读量次]

本站采用 Jekyll 主题 Chirpy