desativando o suporte ao mouse no `vim` em um ambiente` gnome-terminal`


47

Edit: O problema de um mouse ativado vimparece ser específico para gnome-terminal(versão 3.4.1.1-1; estou usando o modo de fallback do gnome 3). Se eu executar xterm, o suporte ao mouse vimé desativado por padrão e tenho a opção de ativá-lo (o :set mouse=aque nunca faço) e desativá-lo ( :set mouse=). Em contraste, quando eu corro vimem gnome-terminal, suporte a mouse é ativado por padrão e não é possível desativá-lo ( :set mouse=não tem efeito). Existe uma solução aquém da alteração do emulador de terminal?


Quero desabilitar completamente o suporte ao mouse vim. Estou executando a vimversão 2: 7.3.547-3 até a gnome-terminalversão 3.4.1.1-1. Os seguintes comandos, executados diretamente no vim ou adicionados ao meu .vimrcarquivo, falham ao desativar o suporte ao mouse:

set mouse =
set mouse =""

Com base na leitura do manual do vim e das postagens on-line, um ou ambos os comandos devem funcionar. Em particular, o manual do vim declara o seguinte

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

Estou usando um laptop e cada vez que minha mão passa no trackpad, a posição do cursor no vim se move abruptamente.

Respostas:


29

Eu descobri o que causa esse mau comportamento com muitos sabores do linux:

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

é 'originário' se não houver, ~/.vimrcmas mesmo se você tiver um arquivo /etc/vimrcou um desses /etc, por isso, se você não tiver um, crie um em branco, conforme sugerido por @lgpasquale:

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

Se você gostou dos outros recursos (como destaque de sintaxe) que obteve de defaults.vim, pode usar este comando em vez do anterior:

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

2
Obrigado! Comentando a linha "um mouse" no arquivo que resolveu o problema para mim (em Archlinux)
luckyrumo

1
Você não precisa editar esse arquivo (que faz parte do vim-runtime no archlinux). Como é declarado nesse arquivo, ele só é carregado se nenhum vimrc for encontrado. Isso significa que colocar um .vimrcarquivo em sua casa deve resolver o problema (foi o que aconteceu comigo). Ele não precisa conter nada, pode até ser um arquivo vazio.
Lgpasquale

Esta é a verdadeira solução para o Fedora 25.
KamikazeCZ

Confirmo que isso funcionou para mim no Debian 8 no final de 2017.
Criggie

1
@rlf Na minha opinião, editar um arquivo sob o /usr/share/qual é gerenciado pelo seu gerenciador de pacotes é uma má idéia. Se você quiser manter algumas opções defaults.vim, eu as copio para ~/.vimrc.
Lgpasquale

24

o suporte ao mouse está desativado por padrão, então algo está ativando-o. Provavelmente, a razão pela qual você set mouse=está falhando é porque ela está sendo executada antes de ativá-la. Eu examinaria o restante do seu vimrc e, possivelmente, o vimrc em todo o sistema ( /etc/vim/vimrcé um local padrão).

Como último recurso, você pode fazer esse truque realmente feio, que fará com que o comando seja executado como uma das últimas coisas feitas antes de fornecer o controle do editor.

autocmd BufEnter * set mouse=

2
Meu /etc/vim/vimrcarquivo é bastante simples ( runtime! debian.vime condicional if filereadable("/etc/vim/vimrc.local") ; source /etc/vim/vimrc.local; endif). O /etc/vim/vimrc.localarquivo não existe no meu sistema. Meu ~/.vimrcarquivo tem apenas algumas linhas que eu adicionei manualmente. Um stracedos vimrevela que ele verifica os seguintes locais para os arquivos de configuração: /usr/share/vim/vimrc, /etc/vim/vimrc.local( ENOENT ), e /home/user/.vimrc. (Por que recebo o erro ENOENT; a ifinstrução não impede tentativas de abrir esse arquivo inexistente?).
User001

Além disso, se eu digitar :set mouse=diretamente no vim, isso não deve substituir as configurações dos arquivos de configuração? Por que a execução direta dessa instrução vimnão desabilita o controle do mouse?
01

1
@ user001 Você vê ENOENTcomo o vim precisa verificar se o arquivo existe. Isso geralmente é feito chamando statque retorna ENOENTse o arquivo não existir.
Ulrich Dangel

2
@ user001 ah, o fato de não funcionar quando digitado na sessão atual é uma informação crítica. Com base nisso, não tenho certeza se é o problema do vim. Talvez o gnome-terminal esteja fazendo algo horrível. Você pode tentar um emulador de terminal diferente?
Patrick

Oi, boa sugestão. Eu tentei xterme não tive nenhum problema com a ativação do mouse. Eu poderia reproduzir o problema digitando :set mouse=aem vimexecução xterm(e invertendo-o digitando :set mouse=). Alguma idéia de como solucionar o gnome-terminalproblema? Devo iniciar um novo tópico? Obrigado.
User001

9

Eu deparei com isso no meu aplicativo "Terminal" do OS X em um host do Fedora Server 25. Eu o resolvi permanentemente com isso no meu .vimrc com:

set mouse=
set ttymouse=

Agora eu posso rolar até o meu histórico anterior do bash no scrollback do meu terminal com o mouse.


É altamente recomendável criar um vimrc.local no mesmo catálogo, porque o vimrc.local não será atualizado se o vim receber atualizações.
Orphans

Funcionou para mim no Raspbian 9.4. Outras respostas não resolveram o comportamento indesejado do mouse quando eu inicio a sessão via PUTTY.
Dmitry

Para qualquer outra pessoa que corta e cola, a nota set ttymouse=teve um comportamento estranho para mim, por exemplo, causou o comportamento das teclas de seta, tecla de escape para mudar.
mozboz 8/01

4

Eu tinha praticamente as mesmas reclamações que você sobre a sensibilidade do Vim mais recente ao mouse. Usar set mouse=""também não fez isso por mim.

Eu tenho set mouse=c(sem aspas) perto da parte inferior do meu .vimrcarquivo. Isso pareceu impedir o Vim de usar o mouse, exceto ao usar o "PuTTY" para transferir da minha máquina Windows (ugh!) Windows no trabalho. Eu tenho que usar shift-middle-button para colar no PuTTY.

30-03-2018 Editar: Agora comecei a usar: :mouse=(sem aspas ou qualquer coisa) em algumas instâncias remotas (CentOS 6.7) do vim para se livrar dos efeitos indesejados do mouse.


Oi, obrigado pela sugestão. Adicionei isso ao meu .vimrcarquivo e tentei executá-lo interativamente ( :set mouse=c), mas nenhum deles teve efeito no meu caso.
User001

3

Adicione isso ao seu .vimrc:

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

1
Isso não tem relevância para a pergunta.
GKFX 24/09

@GKFX Você tem certeza? Parece relevante para mim. Observe que has("gui_running")é 0 em um ambiente de terminal. Essa resposta, ao contrário dos outros, leva esforço extra para única desativar o mouse em um ambiente de terminal, que a questão pede, deixando-o habilitado gvim.
hvd 29/07

@hvd Eu escrevi meu comentário um pouco severamente; Peço desculpas. No entanto, essa resposta apenas coloca um bloco if em torno do que o OP já havia tentado, portanto é improvável que seja útil.
GKFX 29/07

1
@GKFX Fair point, e se aplica a outras respostas também.
hvd 29/07

3

No debian stretch, algumas configurações centrais são carregadas após o carregamento /etc/vim/vimrce /etc/vim/vimrc.local. Veja /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
...

O arquivo padrão é /usr/share/vim/vim80/defaults.vim. Agora, alterar um arquivo central em /usr/share/...é

  • mal
  • não permanente, é revertida após uma atualização

Definir skip_defaults_vimpor descomentar a linha acima remove todas as outras opções definidas por esse arquivo. Para remover apenas as opções indesejadas, coloque o seguinte em /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
"...

Isso carrega o defaults.vimmanual e desativa o carregamento automático, permitindo a reversão de configurações indesejadas, sem a necessidade de criar uma .vimrcpara cada conta de usuário.


Sua resposta finalmente me deu uma solução real para meus problemas no Debian 10 "Buster". Muito obrigado.
aef 02/10

0

Um pouco relacionado à pergunta, se você estiver usando o neovim (nvim), deve colocar set mouse=no seu ~/.config/nvim/init.vimarquivo de configuração.

Se o diretório não existir, crie-o com mkdir -p ~/.config/nvim/

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.