在`gnome-terminal`环境中在`vim`中禁用鼠标支持


47

编辑:启用鼠标的问题vim似乎是特定于gnome-terminal(版本3.4.1.1-1;我正在使用gnome 3后备模式)。如果运行xtermvim默认情况下将禁用in的鼠标支持,并且我可以选择启用它(:set mouse=a我从不这样做)并禁用它(:set mouse=)。相比之下,当我在vim中运行时gnome-terminal,默认情况下会启用鼠标支持,并且无法禁用它(:set mouse=无效)。除了更改终端仿真器以外,是否还有解决方案?


我想完全禁用中的鼠标支持vim。我正在vim通过gnome-terminal版本3.4.1.1-1 运行版本2:7.3.547-3。以下命令,无论是直接在vim中执行还是添加到我的.vimrc文件中,均无法禁用鼠标支持:

set mouse =
set mouse =""

在阅读了vim手册并在线发布后,这两个命令中的一个或两个都应该起作用。vim手册特别指出以下内容

'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.

我正在使用一台笔记本电脑,每次我的手刷触控板时,vim中的光标位置都会突然移动。

Answers:


29

我发现是什么原因导致许多Linux风格出现此不良行为:

/usr/share/vim/vim80/defaults.vim # may be "vim81" depending on your vim version

如果没有~/.vimrc,则为“源文件”,即使您有一个/etc/vimrc或此类/etc文件,因此,如果没有文件,则按照@lgpasquale的建议创建一个空白文件:

mkdir ~/.vim/; [[ -s ~/.vim/vimrc ]] && echo "aborted, file exists" || :> ~/.vim/vimrc

如果您喜欢从defaults.vim获得的其他功能(如语法高亮显示),则可以使用此命令,而不是前一个命令:

mkdir ~/.vim/; [[ -s ~/.vim/vimrc ]] && echo "aborted, file exists" || echo -e "source /usr/share/vim/vim80/defaults.vim\nset mouse=" > ~/.vim/vimrc

2
谢谢!注释掉该文件中的“ mouse -a”行对我来说(在Archlinux上)解决了这个问题
luckyrumo

1
您不需要编辑该文件(这是archlinux上vim-runtime的一部分)。如该文件中所述,只有在未找到vimrc的情况下才会加载该文件。这意味着将.vimrc文件放在家里应该可以解决问题(对我而言确实如此)。它不需要包含任何内容,甚至可以是一个空文件。
lgpasquale

这是为Fedora 25的真正的解决方案
KamikazeCZ

我确认这个工作对我来说在Debian的8在2017年下旬
Criggie

1
@rlf在我看来,编辑一个文件/usr/share/由您的包管理器管理是一个坏主意。如果您想保留某些选项defaults.vim,请将其复制到~/.vimrc
lgpasquale

24

鼠标支持默认情况下处于禁用状态,因此正在启用它。您set mouse=失败的原因很可能是因为它在启动之前就已运行。我会仔细检查您的vimrc的其余部分,可能还会查看系统范围内的vimrc(这/etc/vim/vimrc是标准位置)。

作为最后的选择,您可以执行此丑陋的骇客操作,这将导致命令在您无法控制编辑器之前作为最后完成的事情之一运行。

autocmd BufEnter * set mouse=

2
我的/etc/vim/vimrc文件是裸露的(runtime! debian.vim有条件的if filereadable("/etc/vim/vimrc.local") ; source /etc/vim/vimrc.local; endif)。该/etc/vim/vimrc.local文件在我的系统上不存在。我的~/.vimrc文件只有几行是我手动添加的。的straceof vim显示它检查配置文件的以下位置:/usr/share/vim/vimrc/etc/vim/vimrc.localENOENT)和/home/user/.vimrc。(为什么我会收到ENOENT错误;该if语句不会阻止尝试打开此不存在的文件吗?)。
2012年

另外,如果我:set mouse=直接在vim中键入内容,这不应该覆盖配置文件中的任何设置吗?为什么直接在内部执行此语句vim不会禁用鼠标控制?
user001 2012年

1
@ user001您看到ENOENTas vim必须检查文件是否存在。这通常是通过调用来完成的statENOENT如果文件不存在,则返回。
Ulrich Dangel

2
@ user001啊,当键入当前会话时它不起作用的事实是关键信息。基于此,我不确定这是问题所在。也许gnome-terminal正在做一些可怕的事情。您可以尝试使用其他终端模拟器吗?
Patrick

嗨,好建议。我试过了xterm,鼠标激活没有问题。我可以重现通过键入问题:set mouse=avim运行中xterm(和打字扭转它:set mouse=)。任何想法如何解决gnome-terminal故障?我应该开始一个新线程吗?谢谢。
user001 2012年

9

我在Fedora Server 25主机上的OS X“终端”应用程序中遇到了这个问题。我已经在我的.vimrc中通过以下方式永久解决了该问题:

set mouse=
set ttymouse=

现在,我可以使用鼠标在终端的回滚中滚动到以前的bash历史记录。


强烈建议在同一目录中创建vimrc.local,因为如果vim得到更新,则不会更新vimrc.local
Orphans

它适用于Raspbian 9.4。当我通过PUTTY登录时,其他答案不能解决不希望的鼠标行为。
德米特里(Dmitry)

对于其他任何剪切和粘贴的人,note set ttymouse=对我而言具有奇怪的行为,例如,导致箭头键,转义键发生更改的行为。
mozboz

4

我对您的抱怨与新Vim对鼠标的敏感性几乎相同。使用set mouse=""对我也没有。

我有set mouse=c(没有引号),靠近我的底部.vimrc文件。这似乎使Vim不能使用鼠标,除了使用“ PuTTY”从正在工作的我的Windows计算机上插入时。我必须使用Shift-Middle-Button粘贴PuTTY。

2018年3月30日编辑:我现在已经开始:mouse=在vim的某些远程(CentOS 6.7)实例上使用:( 无引号或任何内容)以摆脱不良的鼠标效果。


嗨,谢谢你的建议。我将其添加到.vimrc文件中并尝试以交互方式执行(:set mouse=c),但对我而言均无效。
user001 2012年

3

将此添加到您的.vimrc

if has("gui_running")
    "echo "yes, we have a GUI"
    set mouse=a
else
    "echo "Boring old console"
    set mouse=
endif

1
这与提出的问题无关。
GKFX

@GKFX确定吗?它看起来与我有关。请注意,has("gui_running")在终端环境中该值为0。与其他答案不同,此答案需要付出额外的努力才能在问题所要求的终端环境中禁用鼠标,而在gvim中使其保持启用状态。
hvd

@hvd我的评论有些刻薄;我道歉。但是,此答案只是在OP已尝试执行的操作周围放置了if块,因此不太有帮助。
GKFX

1
@GKFX公平点,也适用于其他答案。
hvd

3

在debian Stretch上,加载/etc/vim/vimrc之后会加载一些中心设置/etc/vim/vimrc.local。见/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
...

该文件默认为/usr/share/vim/vim80/defaults.vim。现在更改下面的中央文件/usr/share/...

  • 邪恶
  • 非永久的,在更新后将其还原

skip_defaults_vim通过取消注释设置,以上行将删除该文件设置的所有其他选项。要删除不需要的选项,请将以下内容放入/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
"...

这将defaults.vim手动加载并关闭自动加载,从而使您有机会还原所有不需要的设置,而不必.vimrc为每个用户帐户创建一个。


您的答案终于给了我一个真正解决我在Debian 10“ Buster”中遇到的问题的方法。非常感谢。
aef

0

如果你正在使用neovim(nvim),你应该说,有些涉及到的问题set mouse=在您的~/.config/nvim/init.vim配置文件。

如果目录不存在,请使用 mkdir -p ~/.config/nvim/

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.