Both Shift + Insert and "pasting" into a terminal behave in a similar way - they emulate key presses.
This is an important distinction that is often impossible for terminals to make - are you typing or pasting? Note: some terminals support "bracketed paste" modes, after @Josh's comment I even came across a vim plugin bracketed paste in xterm which you may be interested in.
Your pasted data will be lost up to the first character that enters an insert mode. You may also find that your cursor has moved and that other parts of the file have changed (e.g: changed case / been deleted / etc)...
In summary, if you're pasting text that you want inserted into the file, enter insert mode first.
Try copying the following text and paste it into a terminal running Vim (not in insert mode):
hello how are you
The result is the same as typing the same letters on your keyboard:

In this case, it leaves you in insert mode...
Now try exiting insert mode - Esc - and pasting the following
/are
n
This performs a search for "are":

Now paste this:
:0
dG
Oh no... everything is gone!

You will also find that if you have indenting enabled, then pasting a block of code into vim (in insert mode) will indent too much - it'll auto indent, and then your pasted code will include indentation.
def my_print(message):
print(message)
print('done...')

To fix this, use the :set paste
and :set nopaste
commands
