1

我有一个非常大的文件,我想删除每行末尾的所有换行符,所以要合并所有,除非该行以字符开头 £

所以,如果我有这个:

data1
data2
£data3
data4
data5

我想结束这个:

data1data2
£data3data4data5

我在想类似的东西

:%s/\n(but not \n£)//g

有任何想法吗?

4

3 回答 3

4

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

s/\n//g
s/£/\n£/g
于 2012-05-26T18:24:33.690 回答
2

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

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

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

于 2012-05-26T19:40:35.350 回答
0

我会使用以下:global命令:

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

它遍历所有以任何字符开头的行,但 £从上到下,并通过:join命令将每一行与前一行连接起来。

于 2012-05-27T02:56:04.887 回答