vim&csv文件:将标题信息放入新列

5 regex csv vim replace copy-paste

我有大量的csv文件,如下所示:


xxxxxxxx
xxxxx
货件,YD564n
xxxxxxxxx
xxxxx

1,RR1760
2,HI3503
3,HI4084
4,HI1824


我需要让它们看起来如下:


xxxxxxxx
xxxxx
货件,YD564n
xxxxxxxxx
xxxxx

YD564n,1,RR1760
YD564n,2,HI3503
YD564n,3,HI4084
YD564n,4,HI1824


YD564n是一个货件编号,每个csv文件都有所不同.但它总是在"装运"之后出现.

我可以使用哪些vim命令?

syk*_*ora 3

您可以使用宏来完成此操作,并将其应用于多个文件。

这是一个例子。按原样键入以下内容:

3gg$"ayiw:6,$s/^/<C-R>a/<CR>:w<CR>:bn<CR>
Run Code Online (Sandbox Code Playgroud)

现在看起来很可怕。让我看看是否可以更好地解释一下。

3gg$: 转到第三行末尾。

"ayiw:将最后一个字复制到寄存器中a

:6,$s/^/<C-R>a/<CR>:在从第 6 行开始的每一行中,替换寄存器 a 中的开头内容。

:w<CR>:bn<CR>:保存并进入下一个缓冲区。

现在您可以将其映射到一个键,方法是

:nnoremap <C-A> 3gg$"ayiw:6,$s/^/<C-R>a/<CR>:w<CR>:bn<CR>
Run Code Online (Sandbox Code Playgroud)

然后,如果你有 200 个 csv 文件,你可以将 vim 打开为

vim *.csv
Run Code Online (Sandbox Code Playgroud)

进而

200<C-A>
Run Code Online (Sandbox Code Playgroud)

你在那里输入 Ctrl-A ,一切都应该完成。

也就是说,我肯定会更舒服地使用适当的脚本语言来完成此操作,它会更直接。