如何在vi编辑器中为编辑文件添加行号并保存带行号的内容?
在Vi中保存带行号的文件
嘿,我来帮你搞定这个问题!当你用:number(或者更常用的:set nu)在Vi里显示行号时,这些行号只是编辑器的临时显示效果,并不会被写入到文件里。如果想让保存后的文件本身就包含行号,这里有几个实用的方法:
方法1:用Vi内置命令直接给文件添加行号
进入Vi的命令模式,输入以下命令并回车:
:%s/^/\=line(".") . " "/
- 解释一下:
%表示对所有行生效,s/^/.../是替换每行开头的内容;\=line(".")会自动获取当前行的行号,. " "是在行号后面加个空格(你也可以换成".\t"用制表符分隔,看个人习惯)。 - 执行完后,你会看到编辑区里每行前面都加上了行号,直接输入
:w保存,文件就会带着行号被存储啦。
方法2:用终端外部命令生成带行号的文件副本
如果你不想修改原文件,只是需要一个带行号的副本,可以退出Vi后,在终端里用nl或者cat -n命令:
- 用
nl命令(默认会自动给非空行加行号):
nl your_filename.txt > new_file_with_numbers.txt
- 用
cat -n命令(会给所有行包括空行加行号):
cat -n your_filename.txt > new_file.txt
这样生成的新文件就自带行号了,原文件保持不变。
方法3:用Vi的打印导出功能生成带行号的文件
如果只是临时需要带行号的版本,也可以用Vi的打印输出功能导出:
在Vi命令模式下依次输入:
:set printoptions=number :hardcopy > output_with_numbers.txt
这个操作会把当前编辑的内容(带行号)导出到指定的output_with_numbers.txt文件中,原文件不会被修改。
小提醒
方法1会直接修改原文件的内容,如果之后不需要行号了,可以用这个命令删除:
:%s/^[0-9]* //
它会移除每行开头的数字和后面的空格。
内容的提问来源于stack exchange,提问作者Ramchandra Shahi Thakuri
相关产品推荐
相关产品推荐

