如何从 vi 中连接文件的不同特定行

如何从 vi 中连接文件的不同特定行

我正在寻找有关 vi/vim 上“粘贴”问题的解决方案。

如何连接文本文件中的特定行?我有一个这样的文件:

15/10/2011 Revolution day
16/10/2011 About Rome
 - differents newspapers
  blogs an feeds
 :) hp
17/10/2011 Yep, another day

我想粘贴不以数字开头的每一行。我已经尝试过类似的方法,但它不起作用:

:[!^[0-9]]!paste -d ' ' -s

答案1

:%s/\(.*\)\n\(^[^0-9]\)/\1\2/g

如果您想要在之间添加空格或其他内容,请在 \1 和 \2 之间添加它。

答案2

如果可以的话,你可以在 VIM 中分两步完成:

首先,将所有线连接成一条线。

在 VIM 中打开文件后,发出以下按键:VGJ

  • V= 视觉模式(按行,而不是按字符 ( v))
  • G= 突出显示所有行
  • J= 连接所有线

其次,按照结果行开始的日期格式分割行。

在 VIM 中打开文件后,发出以下命令:

:%s#\([0-9][0-9]/[0-9][0-9]/[0-9]\)#^M\1#g

这将在单个连接行中搜索与 NN/NN/N 匹配的任何字符串,其中 N = 0-9,它与行开头的日期格式匹配,并将在该匹配时进行拆分。

答案3

使用vjoin.

:v/^[0-9]/-1,join

细分:

  • :v 选择与正则表达式不匹配的任何行
  • /^[0-9]/ 任何以数字开头的行
  • -1, 上一行到当前行
  • join 合并选定的行,用空格分隔

答案4

请尝试:

:g/^\d/,/^\d/-1j

并忽略错误消息E16:范围无效

相关内容