按模式拆分VIM中的大量文本

时间:2013-05-27 21:22:25

标签: vim

我有大量的文本格式如下:

123123|abcabc|text
text
text
123124|abcabc|text
textext
text

目标是通过以下方式排列文本:

123123|abcabc|texttexttext
123124|abcabc|texttext text

这样每个条目都放在它自己的行上,然后是一个回车符,将它与下一行分开。

我尝试过搜索|符号之类的内容,然后我创建了一个宏来搜索每个第3个|符号,转到上一个单词,然后插入一个回车符。

nnnbi<CR><Esc>

但我无法重复。我是一个非常新的用户,任何方向都会非常有用。

非常感谢!

2 个答案:

答案 0 :(得分:3)

我认为这个命令可以帮到你:

g/|/j3

如果您不希望在加入后有空格,请添加“bang [!]”。

g/|/j!3

有关详细信息,请参阅:h :join

修改

那么这一行应该有效

:v/|/-1 j!

或其他选项也适用:

:v/|/normal! I^U

请注意^U你应按 Ctrl-v Ctrl-u

答案 1 :(得分:0)

一种方法是使用:v模式|,它将为不包含管道的每一行执行下一个命令。该命令将X删除光标位置之前的字符,并且因为光标始终位于第一行,它将删除将连接两行的上一个换行符,依此类推,直到结束:

:v/|/normal X

它产生:

123123|abcabc|texttexttext
123124|abcabc|texttextexttext