如何在Vim中打开的文件中的行范围内添加行号?并非如此(:set nu
仅显示行号),但实际上是在文件的每一行之前添加了行号吗?
Answers:
用
:%s/^/\=line('.')/
编辑:总结评论。
您可以根据需要进行多次调整。
假设您要在视觉选择中的行前添加数字(V
+移动),并且希望编号从42开始。
:'<,'>s/^/\=(line('.')-line("'<")+42)/
如果要在数字和行中的旧文本之间添加字符串,只需将其连接(.
在VimL中使用)到数字表达式:
:'<,'>s/^/\=(line('.')-line("'<")+42).' --> '/
如果您需要将其作为文本进行排序,则可能需要将结果归零,可以使用printf
for 0001, 0002
...代替1, 2
...例如:
:%s/^/\=printf('%04d', line('.'))/
无论如何,如果您想了解更多信息,只需打开vim帮助::h :s
并点击链接(|subreplace-special|
,...,|submatch()|
)
offset
可以1-line("'<")
。想知道,为什么这样的老问题出现在我的RSS中。
:help :s
此处),vim技巧(vim.wikia.com),他人编写的插件,vim_use(官方邮件列表)和类似这样的论坛。
:%s/^/\=line('.') . 'string'/
。在我的情况下,我需要一个逗号,因为我正在对一个csv文件中的行进行编号,所以我做了:%s/^/\=line('.') . ','/
cat -n
在其输入中添加行号。您可以通过管道将当前文件发送到,cat -n
并用打印到stdout的内容替换当前缓冲区。幸运的是,这个复杂的解决方案在vim中少于10个字符:
:%!cat -n
或者,如果您只想进行部分选择,则可视地选择该区域,然后键入以下内容:
:!cat -n
这将自动插入视觉选择标记,并且在键入后将如下所示:
:'<,'>!cat -n
为了删除行号,我建议使用control-v
,它可以让您直观地选择一个矩形,然后可以使用删除该矩形x
。
在类似Unix的环境中,您可以使用cat或awk轻松生成行号,因为vim与shell具有友好的接口,因此vim和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("."))."/"
您还可以使用替代:
:g/^/exe ":s/^/".line(".")."^I/"
您也可以只打印行而不将其添加到文件中:
“有时,特别是在编辑大型源文件以在纸上打印行号时可能会很有用。
为此,您可以使用该选项:set printoptions=number:y
激活和:set printoptions=number:n
停用此功能。
如果应该始终打印行号,请将行set printoptions=number:y
放入”vimrc
。
cat
至call
...(源是可能的Vim tip28在neuron.tuke.sk/~hudecm/VimTips-OFFLINE-nov02 .txt)
:%!awk '{print 1000+NR*10,$0}'
。现在唯一的问题(不是很多)是我的剥离语句:%s / ^ [0-9] * //在前面留了多余的空间,引用\ s似乎无济于事。