删除所有\ n,除非下一行以£ - VIM开头

时间:2012-05-26 18:18:27

标签: vim macvim

我有一个非常大的文件,我希望删除每行末尾的所有\n,以便合并所有文件,除非该行以字符£开头

所以我有这个

data1
data2
£data3
data4
data5

我希望最终得到这个

data1data2
£data3data4data5

我在考虑像

这样的东西
:%s/\n(but not \n£)//g

有什么想法吗?

3 个答案:

答案 0 :(得分:4)

只需删除所有新行,然后再将它们添加到应有的位置。或者使用负面展望,但这对任何人来说都更简单,更容易理解。

s/\n//g
s/£/\n£/g

答案 1 :(得分:2)

@ pb2q提供的解决方案将删除所有新行和下一个字符如果此字符不是“£”或换行符(因为集合不匹配默认为换行符),而在您的问题中,您要求仅删除换行符。这可以通过使用\ze或负面预测来解决:

%s/\n\ze\_[^£]
%s/\n£\@!

注意一些事项:首先,如果要删除某些文本,可以省略替换字符串(除非您需要在这种情况下不需要替换标记)。其次,\_为集合添加换行符。它也可以写成[^£\n],但我想这不是你能做到的最好的事情:任何来自PCRE能力语言的人都认为[^£\n]是“除了'£'之外的任何东西,换行“,而在Vim中它真的”匹配任何东西(包括换行符),除了'£'“。

答案 2 :(得分:0)

我会使用以下命令。

:g/^[^£]/-j!