disabling mouse support in `vim` in a `gnome-terminal` environment
Solution 1
I've found what cause this bad behavior with many linux flavors :
/usr/share/vim/vim80/defaults.vim # may be "vim81" depending on your vim version
it's 'sourced' if there's no ~/.vimrc
but even if you have a /etc/vimrc
or such /etc
file, so if you don't have one just create a blank one as suggested by @lgpasquale:
mkdir ~/.vim/; [[ -s ~/.vim/vimrc ]] && echo "aborted, file exists" || :> ~/.vim/vimrc
If you liked the other features (like syntax highlighting) that you got from defaults.vim, you can use this command rather the the previous one:
mkdir ~/.vim/; [[ -s ~/.vim/vimrc ]] && echo "aborted, file exists" || echo -e "source /usr/share/vim/vim80/defaults.vim\nset mouse=" > ~/.vim/vimrc
Solution 2
mouse support is disabled by default, so something is turning it on. Likely the reason your set mouse=
is failing is because it's running before whatever is turning it on. I'd look through the rest of your vimrc, and possibly the system wide vimrc (/etc/vim/vimrc
is a standard location).
As a last resort, you can do this really ugly hack which will cause the command to run as one of the last things done before giving you control of the editor.
autocmd BufEnter * set mouse=
Solution 3
I ran into this on my OS X "Terminal" app on a Fedora Server 25 host. I've permanently solved it with this in my .vimrc with:
set mouse=
set ttymouse=
Now I can scroll up to my previous bash history in my terminal's scrollback with my mouse.
Solution 4
On debian stretch some central settings are loaded after loading /etc/vim/vimrc
and /etc/vim/vimrc.local
. See /etc/vim/vimrc
:
...
" Vim will load $VIMRUNTIME/defaults.vim if the user does not have a vimrc.
" This happens after /etc/vim/vimrc(.local) are loaded, so it will override
" any settings in these files.
" If you don't want that to happen, uncomment the below line to prevent
" defaults.vim from being loaded.
"let g:skip_defaults_vim = 1
...
This file defaults to /usr/share/vim/vim80/defaults.vim
. Now changing a central file under /usr/share/...
is
- evil
- non-permanent, it gets reverted after an update
Setting skip_defaults_vim
by uncommentig the above line removes all other options set by that file. To just remove the unwanted options put the following into /etc/vimrc.local
:
" /etc/vim/vimrc.local
" honor skip_defaults_vim from the master /etc/vim/vimrc file
if ! exists('skip_defaults_vim')
" Source the defaults file manually from here
source $VIMRUNTIME/defaults.vim
endif
" avoid loading the defaults twice
let g:skip_defaults_vim = 1
" revert any unwanted changes the defaults file introduced
set mouse=
" set any other options you want centrally on your system
"set paste " uncomment if you want paste insert enabled
"...
This loads the defaults.vim
manually and turns off the automatic loading, thus giving you a chance to revert any unwanted settings, without having to create a .vimrc
for every user account.
Solution 5
I had pretty much the same complaints as you about the newer Vim's sensitivity to the mouse. Using set mouse=""
did not do it for me, either.
I have set mouse=c
(no quotes) close to the bottom of my .vimrc
file. That seemed to keep Vim from using the mouse, except when using "PuTTY" to ssh in from my (ugh!) Windows machine at work. I have to use shift-middle-button to paste in PuTTY.
2018-03-30 Edit: I have now started using: :mouse=
(no quotes or anything) on some remote (CentOS 6.7) instances of vim to get rid of undesired mouse effects.
Related videos on Youtube
user001
Updated on September 18, 2022Comments
-
user001 over 1 year
Edit: The problem of an enabled mouse in
vim
appears to be specific tognome-terminal
(version 3.4.1.1-1; I am using gnome 3 fallback mode). If I runxterm
, mouse support invim
is disabled by default, and I have the option to enable it (:set mouse=a
, which I never do) and disable it (:set mouse=
). In contrast, when I runvim
ingnome-terminal
, mouse support is enabled by default and it is not possible to disable it (:set mouse=
has no effect). Is there a solution short of changing terminal emulator?
I want to completely disable mouse support in
vim
. I am runningvim
version 2:7.3.547-3 throughgnome-terminal
version 3.4.1.1-1. The following commands, whether executed directly in vim or added to my.vimrc
file, fail to disable mouse support:set mouse = set mouse =""
Based on reading the vim manual and posts online, one or both of these commands should work. In particular, the vim manual states the following
'mouse' string (default "", "a" for GUI, MS-DOS and Win32) The mouse can be enabled for different modes: n Normal mode v Visual mode i Insert mode c Command-line mode h all previous modes when editing a help file a all previous modes r for |hit-enter| and |more-prompt| prompt Normally you would enable the mouse in all four modes with: > :set mouse=a When the mouse is not enabled, the GUI will still use the mouse for modeless selection. This doesn't move the text cursor.
I am using a laptop and each time my hand brushes the trackpad, my cursor position in vim moves abruptly.
-
user001 almost 12 yearsMy
/etc/vim/vimrc
file is pretty bare (runtime! debian.vim
and a conditionalif filereadable("/etc/vim/vimrc.local") ; source /etc/vim/vimrc.local; endif
). The/etc/vim/vimrc.local
file does not exist on my system. My~/.vimrc
file only has a few lines that I have added manually. Anstrace
ofvim
reveals that it checks the following locations for config files:/usr/share/vim/vimrc
,/etc/vim/vimrc.local
(ENOENT), and/home/user/.vimrc
. (Why do I receive the ENOENT error; doesn't theif
statement prevent attempts to open this non-existent file?). -
user001 almost 12 yearsAlso, if I type
:set mouse=
directly in vim, shouldn't this override any settings from config files? Why would direct execution of this statement withinvim
not disable mouse control? -
user001 almost 12 yearsHi, thanks for the suggestion. I added this to my
.vimrc
file and tried executing it interactively (:set mouse=c
), but neither had an effect in my case. -
sunnysideup almost 12 years@user001 You see the
ENOENT
as vim has to check if the file exists. This is typically done by callingstat
which returnsENOENT
if the file does not exist. -
user001 over 11 yearsHi, good suggestion. I tried in
xterm
and had no problem with mouse activation. I could reproduce the problem by typing:set mouse=a
invim
running inxterm
(and reverse it by typing:set mouse=
). Any idea how to troubleshoot thegnome-terminal
glitch? Should I start a new thread? Thanks. -
phemmer over 11 years@user001 nope sorry, gnome has become evil these days, I stay away :-). I'm sure they consider it a 'feature'. As for a new thread, its a grey area. Personally I'd just add the new info to the question and change the title (leave most of the old question around so people know the whole story, and these answers make sense :-P)
-
user001 over 11 years:) Yes, I use gnome 3 fallback mode because I can't stand their new OS X interface. But a lot of things that always worked in gnome 2 are not working for me, like custom keybindings and
gconf-editor
. What is your desktop environment of choice? I'm thinking of tryingxfce
orlxde
. Thanks for your help. -
GKFX over 7 yearsThis is of no relevance to the question asked.
-
mstr over 7 yearsThank you! Commenting out the line "mouse -a" in that file solved the issue for me (on Archlinux)
-
KamikazeCZ over 7 yearsThis is the real solution for Fedora 25.
-
N.Foe over 7 yearsI confirm this worked for me in Debian 8 in late 2017.
-
Johannes Kohnen about 7 yearsYesssssss, thank you thank you thank you! I confirm this worked for me on Debian 9 in early 2017.
-
rlf almost 7 years@lgpasquale If you create an empty
.vimrc
you lose all of the other settings from this file. If you only comment out the mouse option you can keep everything else. -
lgpasquale almost 7 years@rlf In my opinion editing a file under
/usr/share/
which is managed by your package manager is a bad idea. If you want to keep some of the options indefaults.vim
, I would copy them to~/.vimrc
. -
rlf almost 7 years@lgpasquale Yes very valid point. Your solution is definitely to be preferred (bar any unforeseen side effects).
-
hvd almost 7 years@GKFX Are you sure? It looks relevant to me. Note that
has("gui_running")
is 0 in a terminal environment. This answer, unlike the others, takes extra effort to only disable the mouse in a terminal environment, which the question asks, while leaving it enabled in gvim. -
GKFX almost 7 years@hvd I worded my comment a bit harshly; I apologize. However, this answer just puts an if block around what the OP had already tried, so it's unlikely to be helpful.
-
hvd almost 7 years@GKFX Fair point, and applies to other answers as well.
-
Orphans over 6 yearsIt is strongly recommended to create a vimrc.local in the same catalogue, because vimrc.local wont be updated if vim get updates
-
Jeff over 6 yearsThis confounded me because whenever I did "sudo vim" the mouse support would be turned on. I copied my vim config files to /root/ and things are happy again. Thanks!
-
Dmitry over 5 yearsIt worked for me on Raspbian 9.4. Other answers did not solve undesired mouse behaviour when I log in via PUTTY.
-
suluke over 5 yearsOn my Archlinux system, the path is now /usr/share/vim/vim81/defaults.vim
-
mozboz over 5 yearsFor anyone else cutting and pasting, note
set ttymouse=
had strange behaviour for me, e.g. caused behaviour of arrow keys, escape key to change. -
aef over 4 yearsYour answer finally gave me a real solution to my problems in Debian 10 "Buster". Thanks a lot.