vim cut&paste not working in Stretch / Debian 9

Solution: change mouse=a to mouse=r in your local .vimrc.

The problem with setting this in /usr/share/vim/vim80/defaults.vim as the accepted answer says, is that it will be overwritten on every update. I searched for a long time and ended up on this one: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=864074

LOCAL SOLUTION (flawed):
The first solution is to use local .vimrc files and set it there. So you could create a local .vimrc (~/.vimrc) for every user and set your options there. Or create one in /etc/skel so it will be automatically created for every new user you create.

But when you use local .vimrc files, you have to set all options there, because if there is a local .vimrc, the defaults.vim doesn't get loaded at all! And if there is no local .vimrc all your settings are being overwritten from defaults.vim.

GLOBAL SOLUTION (preferrable):
I wanted a global configuration for all users, which loads the default options and then adds or overwrites the defaults with my personal settings. Luckily there is an option for that in Debian: The /etc/vim/vimrc.local will be loaded after the /etc/vim/vimrc. So you can create this file and load defaults, preventing them from being loaded again (at the end) and then add your personal options:

Please create the following file: /etc/vim/vimrc.local

" This file loads the default vim options at the beginning and prevents
" that they are being loaded again later. All other options that will be set,
" are added, or overwrite the default settings. Add as many options as you
" whish at the end of this file.

" Load the defaults
source $VIMRUNTIME/defaults.vim

" Prevent the defaults from being loaded again later, if the user doesn't
" have a local vimrc (~/.vimrc)
let skip_defaults_vim = 1


" Set more options (overwrites settings from /usr/share/vim/vim80/defaults.vim)
" Add as many options as you whish

" Set the mouse mode to 'r'
if has('mouse')
  set mouse=r
endif

(Note that $VIMRUNTIME used in the above snippet has a value like /usr/share/vim/vim80/defaults.vim.)

If you also want to enable the "old copy/paste behavior", add the following lines at the end of that file as well:

" Toggle paste/nopaste automatically when copy/paste with right click in insert mode:
let &t_SI .= "\<Esc>[?2004h"
let &t_EI .= "\<Esc>[?2004l"

inoremap <special> <expr> <Esc>[200~ XTermPasteBegin()

function! XTermPasteBegin()
  set pastetoggle=<Esc>[201~
  set paste
  return ""
endfunction

One way to cut vim from mouse awareness seems to be commenting out the configuration about the mouse.

In /usr/share/vim/vim80/defaults.vim I commented out the mouse specific detection as in:

" In many terminal emulators the mouse works just fine.  By enabling it you
" can position the cursor, Visually select and scroll with the mouse.
"if has('mouse')
"  set mouse=r
"endif

(in those vim configuration files, " is initiating a comment).

The change has allowed us to copy and paste again without any problems.

I do agree with the comments this is not the ideal solution, due to indeed being overwritten into any update unless the configuration file is protected (or diverted). At the time, and due to specifics either of a version of the package or of the configuration of the servers where I used to work, it was the only one that worked. As such, I am leaving this answer here, and it should only be used as a last resort solution.


The Vim documentation for the mouse option says

The xterm handling of the mouse buttons can still be used by keeping the shift key pressed.

Tags:

Vim

Debian