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
本文由作者按照
CC BY 4.0
进行授权