How to make vim paste from (and copy to) system's clipboard?
VimEditorClipboardVim Problem Overview
Unlike other editors, vim stores copied text in its own clipboard. So, it's very hard for me to copy some text from a webpage and paste it into the current working file. It so happens I have to either open gedit or type it manually.
Can I make vim paste from and to the system's clipboard?
Vim Solutions
Solution 1 - Vim
Be aware that copying/pasting from the system clipboard will not work if :echo has('clipboard')
returns 0. In this case, vim is not compiled with the +clipboard
feature and you'll have to install a different version or recompile it. Some linux distros supply a minimal vim installation by default, but if you install the vim-gtk
or vim-gtk3
package you can get the extra features nonetheless.
The "*
and "+
registers are for the system's clipboard (:help registers
). Depending on your system, they may do different things. For instance, on systems that don't use X11 like OSX or Windows, the "*
register is used to read and write to the system clipboard. On X11 systems both registers can be used. See :help x11-selection
for more details, but basically the "*
is analogous to X11's _PRIMARY_
selection (which usually copies things you select with the mouse and pastes with the middle mouse button) and "+
is analogous to X11's _CLIPBOARD_
selection (which is the clipboard proper).
If all that went over your head, try using "*yy
or "+yy
to copy a line to your system's clipboard. Assuming you have the appropriate compile options, one or the other should work.
You might like to remap this to something more convenient for you. For example, you could put vnoremap <C-c> "*y
in your ~/.vimrc
so that you can visually select and press Ctrl+c to yank to your system's clipboard.
You also may want to have a look at the 'clipboard'
option described in :help cb
. In this case you can :set clipboard=unnamed
or :set clipboard=unnamedplus
to make all yanking/deleting operations automatically copy to the system clipboard. This could be an inconvenience in some cases where you are storing something else in the clipboard as it will override it.
To paste you can use "+p
or "*p
(again, depending on your system and/or desired selection) or you can map these to something else. I type them explicitly, but I often find myself in insert mode. If you're in insert mode you can still paste them with proper indentation by using <C-r><C-p>*
or <C-r><C-p>+
. See :help i_CTRL-R_CTRL-P
.
It's also worth mentioning vim's paste
option (:help paste
). This puts vim into a special "paste mode" that disables several other options, allowing you to easily paste into vim using your terminal emulator's or multiplexer's familiar paste shortcut. (Simply type :set paste
to enable it, paste your content and then type :set nopaste
to disable it.) Alternatively, you can use the pastetoggle
option to set a keycode that toggles the mode (:help pastetoggle
).
I recommend using registers instead of these options, but if they are still too scary, this can be a convenient workaround while you're perfecting your vim chops.
See :help clipboard
for more detailed information.
Solution 2 - Vim
You can paste into vim by gnome-terminal's shortcut for paste. Place the file in insert mode and use
Ctrl+Shift+v.
Remember beforehand to
:set paste
to avoid messing with the indentation.
Solution 3 - Vim
I believe that this question deserves a more objective and graphical answer:
Entering Paste Mode
- ESC
- :set paste
- press i
- SHIFT + Insert (with a text copied on your clipboard)
Leaving Paste Mode
- ESC
- :set nopaste
- press i
You pasted the text and you're able to type again.
Solution 4 - Vim
For my that configuration works for copying and pasting
" copy and paste
vmap <C-c> "+yi
vmap <C-x> "+c
vmap <C-v> c<ESC>"+p
imap <C-v> <ESC>"+pa
Solution 5 - Vim
Linux
On my Linux system, the +
and *
registers map to an X11 selection, which can be pasted with the middle mouse button. When :set clipboard=unnamed
and :set clipboard=unnamedplus
are used, then the registers map to the clipboard, and can be pasted with CTRL-V.
The specifics seem to be somewhat configuration and system dependent, so your mileage will definitely vary. It should definitely get you pointed in the right direction, though.
See Also
Solution 6 - Vim
This would be the lines you need in your vimrc for this purpose:
set clipboard+=unnamed " use the clipboards of vim and win
set paste " Paste from a windows or from vim
set go+=a " Visual selection automatically copied to the clipboard
Solution 7 - Vim
clipboard
There is a special register for storing this selection, it is the "* register. Nothing is put in here unless the information about what text is selected is about to change (e.g. with a left mouse click somewhere), or when another application wants to paste the selected text. Then the text is put in the "* register. For example, to cut a line and make it the current selection/put it on the CLIPBOARD:
"*dd
Similarly, when you want to paste a selection from another application, e.g., by clicking the middle mouse button, the selection is put in the "* register first, and then 'put' like any other register. For example, to put the selection (contents of the CLIPBOARD):
"*p
registers E354
> There are nine types of registers:
> 1. The unnamed register ""
> 2. 10 numbered registers "0 to "9
> 3. The small delete register "-
> 4. 26 named registers "a to "z or "A to "Z
> 5. four read-only registers ":, "., "% and "#
> 6. the expression register "=
> 7. The selection and drop registers "*, "+ and "~
> 8. The black hole register "_
> 9. Last search pattern register "/
Paste from clipboard
1. Clipboard: Copy
2. Vim insertmode, middle mouse key
Check for X11-clipboard support in terminal
When you like to run Vim in a terminal you need to look for a version of Vim that was compiled with clipboard support. Check for X11-clipboard support, from the console, type:
% vim --version
If you see "+xterm_clipboard", you are good to go.
http://vim.wikia.com/wiki/Accessing_the_system_clipboard
> The X server maintains three selections, called: > > PRIMARY, SECONDARY and CLIPBOARD > > The PRIMARY selection is conventionally used to implement copying and > pasting via the middle mouse button. The SECONDARY and CLIPBOARD > selections are less frequently used by application programs.
Solution 8 - Vim
Didn't have +clipboard so I came up with this alternative solution using xsel:
Add to your ~/.vimrc:
vnoremap <C-C> :w !xsel -b<CR><CR>
Solution 9 - Vim
I tried the suggestions above and none of them worked in my environment. (Windows PuTTY clone over ssh)
Some additional googling turned up: https://unix.stackexchange.com/questions/110684/copy-paste-into-sshd-vim-from-local-windows-clipboard
One of the comments suggested using SHIFT+INSERT
which did the trick for pasting from my desktop's clipboard into Vim's buffer. Ctrl-C
was already working to copy to the desktop's clipboard from Vim.
Solution 10 - Vim
Copy To OS Clipboard
Select text in visual mode, press "*y
Paste From OS Clipboard
Press "*p
Solution 11 - Vim
A quick note for people whose Vim installation does not support the *
and +
registers. It is not necessary to download a new Vim installation to paste from the clipboard. Here is an alternative method:
-
Install
parcellite
(a clipboard manager with a low memory footprint); -
In your
.vimrc
file, add the following:command Clip r !parcellite -c
-
Restart vim.
Now when you type in :Clip
as an ex
command, the contents of the clipboard will be pasted in at the cursor. You can also map the new command to a function key so as to be able to do this with one keystroke.
Solution 12 - Vim
The simplest solution to this, that also works between different Linux machines through ssh
is:
-
Check whether vim supports X-11 clipboard:
vim --version | grep clipboard
. If it reports back-clipboard
and-xterm_clipboard
you should install eithervim-gtk
orvim-gnome
(gvim on arch linux) -
Add the following lines to your
.vimrc
:
> set clipboard=unnamedplus > set paste
- If you login on a different machine via ssh, use the option -Y:
ssh -Y machine
Now copying and pasting should work exactly as expected on a single, and across different machines by only using y
for yank and p
for paste. NB modify .vimrc
on all machines where you want to use this feature.
Solution 13 - Vim
If you are using a mouse first do
:set paste
Then right click mouse
and the contents in buffer will be pasted
Solution 14 - Vim
This works for me: Ctrl+Shift+V
Solution 15 - Vim
I ran into this issue on a mid-2017 Macbook Pro running vim
within iTerm2
as my primary development environment.
As other answers have suggested, I ran vim --version
and noticed that it returns -clipboard
, which means that the version of vim
that shipped with my machine hasn't been compiled with the clipboard option.
The homebrew
package for vim
appears to compile with the clipboard
option, so the fix for me was to:
- Run
brew install vim
- Add
set clipboard+=unnamed
to my~/.vimrc
file - Close and reopen
iTerm2
Solution 16 - Vim
Following on from Conner's answer, which was great, but C-R C-p +
and C-R C-p *
in insert mode is a bit inconvenient. Ditto "*p
and "+p
from command mode.
a VIM guru suggested the following to map C-v
to what C-r C-p +
does.
> You could have :inoremap <C-v> <C-o>"+p
for insert mode only
>
> if you really wanted to override blockwise visual mode (not recommended by him as visual
> mode is good) you could have map <C-v> "+p
Solution 17 - Vim
With Vim 8+ on Linux or Mac, you can now simply use the OS' native paste (ctrl+shift+V
on Linux, cmd+V
on Mac). Do not press i
for Insert Mode.
It will paste the contents of your OS clipboard, preserving the spaces and tabs without adding autoindenting. It's equivalent to the old :set paste
, i
, ctrl+shift+V
, esc
, :set nopaste
method.
You don't even need the +clipboard
or +xterm_clipboard
vim features installed anymore. This feature is called "bracketed paste". For more details, see https://stackoverflow.com/questions/2514445/turning-off-auto-indent-when-pasting-text-into-vim/56781763#56781763
Solution 18 - Vim
What simply worked for me in Linux (Ubuntu 20.04)
-
Copying to system clipboard:
- Select what you want to copy in Visual mode.
- Type
"+y
- Press Enter
-
Paste something form system's clipboard:
- Move to the place where you want to paste the copied text in vim.
- Just type
"+P
to paste before cursor OR"+p
to paste after cursor.
To know more how this works: Copy and Paste to/from Vim from/to Other Programs!
Solution 19 - Vim
If you are using vim in MAC OSX, unfortunately it comes with older verion, and not complied with clipboard options. Luckily, homebrew can easily solve this problem.
install vim:
brew install vim --with-lua --with-override-system-vim
install gui verion of vim:
brew install macvim --with-lua --with-override-system-vim
restart the terminal to take effect.
append the following line to ~/.vimrc
set clipboard=unnamed
now you can copy the line in vim with yy
and paste it system-wide.
Solution 20 - Vim
If you have it, try removing this from your vimrc: set mouse=a
It messes with the paste functionality.
Solution 21 - Vim
These key combinations work on any OS.
Select target Text using the mouse, and refer to the key sequences to copy, cut, and paste.
- copy: Ctrl + Del
- paste: Shift + Insert
- cut: Shift + Del
- paste: Shift + Insert
Solution 22 - Vim
On top of the setting :set clipboard=unnamed
, you should use mvim -v
which you can get with brew install macvim
if you're using vim on Terminal.app on Mac OS X 10.9. Default vim does not support clipboard option.
Solution 23 - Vim
The other solutions are good if you want to change your vimrc, etc... However I wanted an simple way to copy from vim to my system keyboard. This is what I came up with.
- Select the text you want to copy with visual mode
v
- Press
:
(it will automatically expand to show:'<,'>
) - Type
y *
ory +
(depending on your system) to yank the selected text to the system clipboard
Solution 24 - Vim
Since vim 8 right click enables visual mode by default. This prevents the "normal" copy & paste (call it a "defect by design" https://github.com/vim/vim/issues/1326). Fix it by doing:
echo "set mouse-=a" >> ~/.vimrc
.
Exit and restart vim.
Solution 25 - Vim
It may also be worth mentioning, on OSX using Vim, you can select text with the mouse, Cmd-C to copy to OSX system clipboard, and the copied text will be available in the clipboard outside of Vim.
In other words, OSX treats it like it were a regular window, and this is where the much-maligned Apple "Command" button comes in handy.
B-30
Solution 26 - Vim
There are two simple ways to do this. Make your file in insert mode and
- press the middle button (the scroll wheel) in your mouse, or
- Ctrl + Shift + V
Solution 27 - Vim
Based on @lis2 answer, I use a simpler configuration that will not force Insert mode at the end:
" Copy and paste
if has('clipboard') && !has('gui_running')
vnoremap <C-c> "+y
vnoremap <C-x> "+d
vnoremap <C-v> "+p
inoremap <C-v> <C-r><C-o>+
endif
Mind that all these override default Vim mappings:
v_CTRL-C
: stop Visual modev_CTRL-X
: subtract [count] from numberv_CTRL-V
: blockwise Visual modei_CTRL-V
: insert next non-digit literally, which is also mapped toi_CTRL-Q
As an alternative, one can use keys inspired in the "yank", "delete" and "put" Vim verbs: <C-y>
, <C-d>
and <C-p>
respectively. These would only override one default mapping:
i_CTRL-P
: backwards search keyword for completion
Solution 28 - Vim
What you really need is EasyClip. It will do just that and so much more...
Solution 29 - Vim
After entering the vim window, press I to enter into insert mode. Then move your cursor to the desire location and press Ctrl + Insert button simultaneously to paste from the clipboard.
Solution 30 - Vim
When I use my Debian vim that is not integrated with Gnome (vim --version | grep clip # shows no clipboard support), I can copy to the clipboard after holding the Shift key and selecting the text with the mouse, just like with any other curses program. As I figured from a comment by @Conner, it's the terminal (gnome-terminal in my case) that turns off its mouse event reporting when it senses my Shift press. I guess curses-based programs can receive mouse events after sending a certain Escape sequence to the terminal.
Solution 31 - Vim
If you are on windows and you want to paste contents of system clipboard using p
then type this command.
:set clipboard = unnamed
This solved my problem.
Solution 32 - Vim
For some international keyboards, you may need to press "+Space to get a "
.
So in those case you would have to press "Space+y or "Space*y to copy.
And "Space+p or " Space*p to paste.
Solution 33 - Vim
I used the answer of NM Pennypacker and installed vim via homebrew for an early 2011 MacBook Pro:
brew install vim
Now I can also use the "* register to copy and paste text within vim. I even didn't have to change something within my ~/.vimrc file or the $PATH. Homebrew added symlinks in /usr/local/bin, e.g. vim -> ../Cellar/vim/8.1.2350/bin/vim.
The alternative, which worked before, is to copy some lines of text within vim by marking it with the mouse and using copy and paste (cmd + c, cmd + v) on a mac. This option only works if the text you want to copy and paste is less in size than the window size of vim. If you want to copy all text within vim by marking the whole window or using cmd + a, this will copy other parts of the console, written before starting vim, which is very annoying.
So, I am happy having found the new method using the clippboard register.