1

I'm trying to find the right ex command to overwrite the current vim buffer with the system clipboard.

The relevant system clipboard register is "+ in this case.

My first guess was to use :%+p; i.e. select the whole buffer % and then paste p the "+ register to the current buffer. But this doesn't work.

The other way around, yanking the current buffer into the system clipboard is accomplished by :%y+; % select the whole buffer; y copy; + to the system clipboard register.

Mussé Redi
  • 225
  • 3
  • 13
  • Based on the answer of @statox , youve got the put syntax wrong. Register comes after. – D. Ben Knoble Jun 18 '18 at 12:43
  • @D.BenKnoble Nope, the put syntax isn't right if it's put afterwards either. Both syntaxes are wrong. That is, if you mean :%p+, by the registers come after; it results in an error: E488: Trailing characters. – Mussé Redi Jun 18 '18 at 13:23
  • Darn. I’ll do some reading later this evening. But statox has the right idea (two commands, delete then put) – D. Ben Knoble Jun 18 '18 at 13:24
  • @D.BenKnoble Alright! Well, :%d | put + doesn't work either, obviously since it's the same command. But, I'll be digging into this too; two commands seem like the right amount. :) – Mussé Redi Jun 18 '18 at 13:26
  • @MusséRedi p+ doesn't work because p is the print command, :pu is the shortest form of put (:%pu+ is valid but doesn't quite do what you want). – Mass Jun 18 '18 at 23:28

2 Answers2

1

You could add the following in your vimrc:

command! ReplaceWithClipboard %d | put +

This way when you call the command :ReplaceWithClipboard vim will

  • %d delete all the lines in the buffer
  • put + put your clipboard register

You can have a look at

statox
  • 49,782
  • 19
  • 148
  • 225
  • This does not work. Even when I tried populating the system clipboard from within vim itself. The message in the header below just reads --No lines in buffer--. – Mussé Redi Jun 18 '18 at 13:17
  • 1
    @MusséRedi That's weird it works fine on my setup, maybe try to start Vim without configuration vim -u NONE – statox Jun 18 '18 at 13:26
  • Well, it seems that you're right; it works when starting vim without configuration. What kind of configuration settings could be interfering with these two simple commands? – Mussé Redi Jun 18 '18 at 13:36
  • @MusséRedi Take a look at our famous question How do I debug my vimrc to find out ;) – statox Jun 18 '18 at 14:17
  • might want to use sil %d _ to hide the "no lines in buffer" message and to prevent that the deleted stuff ends up in the clipboard (:h clipboard-unnamed). Might as well need 0put +|$d _ to remove the trailing new-line that will be added (without the 0put it will appear in line 1) – Christian Brabandt Jun 18 '18 at 14:30
0

By visual selection, one can (1) select the whole buffer by moving the start of the buffer, with the motion gg; (2) pressing v, to transfer to visual mode; (3) executing the motion GG, to select the whole buffer; (4) accessing the system clipboard register +, by pressing "+; and finally, (5) pasting the register into the current buffer, by pressing p. :)

I still don't know how to do this in the form of a self-contained ex-command though, in which I'm interested.

Mussé Redi
  • 225
  • 3
  • 13