I'm looking for a solution about a "paste" problem on vi/vim .

How to join specific lines in a text file? I have a file like this:

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

and I want to paste every line that does not start with a number. I've tried something like this, but it does not work:

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

5 Answers 5


If you want a space or something between, add it between \1 and \2.


you can do it in two steps in VIM, if that's acceptable:

First, join all lines into a single line.

with the file open in VIM, issue the following keystroke: VGJ

  • V = Visual Mode (linewise, rather than character-wise (v))
  • G = highlight all lines
  • J = Join all lines

Second, split your lines on the date format the resulting lines start with.

with the file open in VIM, issue the following command:


This will search the single joined line for any string that matches NN/NN/N, where N = 0-9, which matches the date format that your lines start with, and will split on that match.


Use the v with join.


Broken down:

  • :v select any lines that do not match regular expression
  • /^[0-9]/ any line starting with a digit
  • -1, the previous line to the current line
  • join combine the lines selected, separated by whitespace

I'm talking about vim, this will not run in vi. Be aware of that.

What about


to delete all lines in buffer , which start with a number.


to highlight all lines

    :w ! paste -d ' ' -s

and after that


to go back to the starting point

  • It does not seems to work. Morevorer, I have stated an incorrect question. I want to join every line not starting by a number to the previous line starting with a number.
    – gogolb
    Commented Oct 28, 2011 at 13:34

please try:


and ignore error message E16: Invalid range

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .