239

I tried using Ctrl + V for pasting contents in a vi editor document, but Ctrl + V is not interpreted as a paste.

3
  • 19
    Just a note, the main reason to use Vi is because Vim isn't installed. If you have Vim installed, it's probably worth using that instead. There isn't really an advantage to Vi besides that it is already present on every Unix install. The best way to learn Vim in my opinion is to open your terminal emulator (not from within Vim) and type vimtutor It will get you up to speed to where it's usable to you in about 45 minutes. Feb 16, 2013 at 18:58
  • 2
    +1 @BenMordecai - I was already familiar with vi (from old), including its convenient sub-shell capability, but needed that refresh. Great little bit of tutoring. Went through it like a breeze. Thanks.
    – Cbhihe
    Oct 2, 2014 at 16:35
  • Checkout my answer here stackoverflow.com/a/65666057/9384511
    – ABN
    Jan 11, 2021 at 12:51

13 Answers 13

273

First, make sure you're in edit mode (press i). Then you can paste with Ctrl+Shift+V, if you're in a terminal emulator like gnome-terminal (or select "Paste" from the right-click menu).

You can also type :set paste in vim before you paste to disable automated indenting, etc. Then :set nopaste after you've pasted the content.

Also check this question on stackoverflow.com for more information.

If you want to copy/paste lines in vim (as opposed to pasting clipboard content), you'll want to check out the yank command. Here is a cheat sheet that might help.

3
  • 1
    I think if you have mouse cursor on, you cannot paste using Ctrl+Shift+V.
    – Alvin Wong
    Feb 16, 2013 at 14:34
  • 15
    Just a note, the I is case-sensitive. The lowercase i is the normal way of entering insert mode. Capital I brings the cursor to the beginning of the line and then enters you into insert mode. Feb 16, 2013 at 19:01
  • 1
    the :set paste is a lifesaver!
    – joniba
    Jun 2, 2021 at 14:56
77

Vi (and Vim) works very differently compared to a normal text editor such as Gedit. It also has a pretty steep learning curve. If you want to learn some basic commands, start with this interactive tutorial.

However, to answer you question. The system clipboard's content can be accessed through the plus register. So to paste something from the system clipboard you can, from the Normal mode, press: "+p (Not at the same time, but one after another).

8
  • 3
    This is something I did not know till now. Also, +1 for linking yet another awesome vim tutorial.
    – Attila O.
    Feb 16, 2013 at 8:37
  • 21
    Speaking of learning curves for editors, there is the "classical learning curves for some common editors", blog.thilelli.net/public/store/attached/curves.jpg.
    – hlovdal
    Feb 16, 2013 at 15:02
  • In GNOME Terminal, the short-cuts for copy and paste are Ctrl-Shift-C and Ctrl-Shift-V, respectively.
    – Flimm
    Feb 23, 2013 at 9:17
  • 1
    I've tried to press in turn <kbd>"</kbd>, <kbd>+</kbd> and <kbd>p</kbd>, also <kbd>"</kbd> and <kbd>p</kbd> and nothing has happened. What I've done wrong? I use vi not vim
    – d.k
    Dec 13, 2013 at 13:51
  • 1
    That's the right answer. Using eg. Ctrl-Shift-v will work only with the simplest contents (line breaks and indentations can get really wrong if you're in the terminal, and you forgot to use set :paste).
    – rsenna
    Mar 11, 2018 at 17:37
41

I always use Shift+Insert when I want to paste text into the terminal, works in all terminal programs.

(Which is also the reason why I never get a laptop where you can't press Insert without pressing a secondary key)

6
  • 3
    Vi/Vim != terminal ;) Feb 17, 2013 at 17:01
  • +1 for this.. What do you use to perform say Ctrl+A,Ctrl+C also ? Dec 28, 2013 at 18:18
  • If I use a terminal inside a DE I usually just select text with the mouse and copy with Ctrl+Shift+C. Jan 2, 2014 at 14:38
  • Shift+Insert also works in gvim. (I'm running Ubuntu 13.10, if that makes any difference.)
    – eksortso
    Jan 20, 2014 at 17:27
  • 2
    best solution. First open the File. Then press I for insert-Mode, then press Shift + Insert, then Esc, then :wq! to save and exit file. Done :) May 7, 2020 at 20:07
32
  1. If you want to copy paste contents within the same file, use yank and paste.

  2. If you want to copy paste contents across terminals, open the first file, yanking the text you want, then open your second file within vim (e.g. :tabnew /path/to/second/file) and press p to paste it.

  3. If you want to copy paste contents from vim to an external program, you need to access the system clipboard. I assume you use Ubuntu. The GUI version of vim always has clipboard support, however, if you like to use Vim from a terminal, you will have to check for X11-clipboard support.

    From the console, type:

    $ vim --version | grep xterm
    

    If you find -xterm_clipboard, you have two options:

    1) Compile vim yourself, with the xterm_clipboard flag on

    2) Uninstall vim, install gvim (vim-gtk or vim-gnome) instead. You can stick to non-gui vim by calling vim from the terminal, the same way you did before. This time when you check you should find +xterm_clipborad.

    Now, when you yank some text in the + register inside your vim editor (e.g. "+yy), it also gets copied to the system clipboard which you can retrieve from your external program like gedit editor, by using Ctrl+V.

  4. If you want to copy paste contents from an external program into vim, first copy your text into system clipboard via Ctrl+C, then in vim editor insert mode, click the mouse middle button (usually the wheel) or press Ctrl+Shift+V to paste.

    These are 4 basic copy & paste conditions related to vim. I hope this helps.

2
  • What's the point of :tabnew /path/to/second/file ? You can achieve the exact same thing yanking/copying/cutting in first file, opening the second file with :vi /path/to/second/file and pasting (p/P) in it. At least in my case... Or is it because I do have the +xterm_clipboard vim feature enabled ? Or is there more to tabnew than just that ?
    – Cbhihe
    Oct 2, 2014 at 17:39
  • 1
    On Ubuntu vim-gtk has xterm_clipboard support and on Fedora xvim has it.
    – icc97
    Jun 18, 2018 at 1:58
10

Use the center button of the mouse to insert text you've highlighted elsewhere.

It is useful when you don't have access to your system clipboard (for example, in a remote SSH session).

Must be in edit/insert mode for Vim.

1
  • What if you are using a laptop with only touchpad at your disposal? Then your solution won't work. Apr 5, 2020 at 10:12
9

Once you enter vi, press i to get into insert mode, right click into terminal, click paste.

3
  • I thought was lower-case i. What does upper-case I do?
    – Flimm
    Feb 23, 2013 at 9:16
  • @Flimm that was already explained in a comment by Ben Mordecai on another answer. Feb 23, 2013 at 19:42
  • I've edited the answer to be lower-case i. Upper-case I moves the cursor to the beginning of the line before entering insert mode, which is not needed here.
    – Flimm
    Feb 23, 2013 at 20:04
8

Detailed instructions to copy/paste lines of text in vi using yank and put

(use the following in the command mode of vi)

Copy (YANK)

To copy one line in vi:

  • In the command mode, move the cursor to the line that needs to be copied and type yy or type Y

To copy 2 lines in vi:

  • In the command mode, move the cursor to the first line that needs to be copied and type 2yy or type 2Y

(likewise, any number of lines can be copied)

To copy all lines from the current location to the end of the file:

  • In the command mode, move the cursor to the first line that needs to be copied and type yG

To copy all text from the current location to the end of the current word:

  • In the command mode, move the cursor to location from where text needs to be copied and type yw

To copy all text from the current location to the end of the line:

  • In the command mode, move the cursor to location from where text needs to be copied and type y$

Paste (PUT)

To paste text in the clipboard - after the location of the cursor:

  • In the command mode, type p

To paste text in the clipboard - before the location of the cursor:

  • In the command mode, type P
6

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

4
  • That's the answer I'm looking for. Since Vim is not default on gnu/linux distros, it needs to be installed even in ubuntu. Additionally, Vi's up down buttons doesn't work on ubuntu and no highlight. Aug 20, 2019 at 10:11
  • 1
    why isn't this voted significantly higher?!
    – jouell
    Mar 8, 2020 at 3:38
  • works in 'vi' too, easiest answer by far. Mar 9, 2021 at 20:59
  • For mac users, this is the answer cmd+V , as mentioned in this comment.Thanks.
    – Ek1234
    Aug 6, 2021 at 6:21
2

I had an issue, because my Vim installation was not supporting the clipboard:

vim --version | grep clip
-clipboard       +insert_expand   +path_extra      +user_commands
+emacs_tags      -mouseshape      +startuptime     -xterm_clipboard

I installed vim-gnome (which supports the clipboard) and then checked again:

vim --version | grep clipboard
+clipboard       +insert_expand   +path_extra      +user_commands
+emacs_tags      +mouseshape      +startuptime     +xterm_clipboard

Now I am able to copy and paste using "+y and "+p respectively.

1
  • This fixed my problem! Nov 12, 2018 at 9:27
2

First, check if your vim has clipboard support installed

:echo has('clipboard')

If it returns 1 you do have clipboard support

To copy to the clipboard you have to either select your target, let's say a paragraph vip and then "+y, which means to the register + copy the selected portion or you can simply type in normal mode: "+yip, which means: to the register + copy inner paragraph.

To paste from the clipboard in normal mode you can:

"+p

On insert mode you can simply Ctrl-rCtrl-o+. Tha will insert your clipboard content and preserve all indentation as it is on the clipboard.

If you want to copy the whole buffer to the clipboard you can:

:%y+
% ........ the whole file
y ........ yank (copy)
+ ........ to the clipboard

To copy the last command to the clipboard:

:let @+=@:

To copy the last search to the clipboard:

 :let @+=@/

to copy from the mark "a" until the mark "b" to the clipboard:

 :'a,'b y+

To test any function that is on the clipboard you can

:@+    (and then type Enter)
:call FunctionName() (and then type Enter)

To see what is on the clipboard:

:reg +

To copy all lines that have "pattern" to the clipboard you can:

:let @a=""
:[range]g/pattern/y A
:let @+=@a

:let @a="" ............ cleanses the register 'a'
:[range]g/pattern/y A   append to the register A every line with pattern
:let @+=@a ............ copy register 'a' to the clipboard
1

You could use Ctrl+Shift+V to paste in terminal version vim, But for GUI version vim like Neovim-Qt, pasting text from the system clipboard with Ctrl+Shift+V simply won't work. You have to access to the clipboard "+ or "* in the vim editor.

Adding new keybinding in .vimrc will simply the copy/paste commands:

" paste from system clipboard, align indentation with surroundings
noremap <Leader>p "*]p:set nopaste<CR>
" copy a sentence into system clipboard
noremap <Leader>y "+y)
0

If you're root: Ctrl+Shift+V

If you're not-root: Center click the mouse.

0

I just wanted to note that using Vim via Git Bash on Windows, you can just use p or center-click of the mouse without being in insert mode. Using Vim through PuTTY, you can just right click. And highlighting does the copying.

I've noted this because I got here not seeing that this is SE for Ubuntu.

Other helpful commands:

  • yy(# of lines) - yank (copy)
  • dd(# of lines) - delete
  • p - paste line below current line
  • Shift + p - paste line above current line
  • u - undo
  • r - redo
  • i - insert mode
  • v - visual mode
2
  • That did not work for me on Windows Git Bash. Which console are you using, mintty or windows cmd?
    – wisbucky
    Jul 17, 2019 at 23:16
  • I believe it was mintty. Jul 22, 2019 at 15:31

You must log in to answer this question.

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