我正在寻找有关 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
使用v
与join
.
:v/^[0-9]/-1,join
细分:
:v
选择与正则表达式不匹配的任何行/^[0-9]/
任何以数字开头的行-1,
上一行到当前行join
合并选定的行,用空格分隔
答案4
请尝试:
:g/^\d/,/^\d/-1j
并忽略错误消息E16:范围无效