如何在vim中同时匹配两行

如何在vim中同时匹配两行

我有一个文件,其中包含具有制表符分隔格式的记录,但在两行中,我想使用 vim 编辑器模式匹配将具有制表符分隔值的记录排列在一行中。

前任。

Abc     PQR     XYZ     NMW
    XYX     PQR     LMW
PLX     PXQ     LPN     PWF
    XYQ     PLP     PMQ    LWP

我想将记录的第二行添加到记录的第一行。我想要的输出格式是这样的。

Abc     PQR     XYZ     NMW    XYX     PQR     LMW
PLX     PXQ     LPN     PWF    XYQ     PLP     PMQ     LWP

我尝试使用以下命令来解决我的问题。

:%s/\n(\w\+.*)/\t\1/cgi

这是用除第一行之外的前面的制表符替换每行数据。

我们如何使用 vim 模式匹配和替换来解决这个问题?

答案1

怎么样

:%s/\n\s\+/\t/gc

这将找到后面跟着空格的任何换行符,并将其全部替换为制表符,从而组合您的行。

答案2

如果您知道第一行始终以字母开头,第二行始终以制表符开头,那么最简单的方法可能是使用:g(在与正则表达式匹配的所有行上运行 ex 命令) 和j!(join不删除空格)。看看help :ghelp :j。结合这些,你会得到

:%g/^\w/j!

答案3

您可以使用以下方法轻松完成paste

paste -sd'\0\n' file

vim

:%!paste -sd'\0\n' -

相关内容