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.

user001
fonte

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
Gilles Quenot
fonte
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=
Patrick
fonte
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.

Robpol86
fonte
É 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.

Bruce Ediger
fonte
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
ipirlo
fonte
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.

Holger Böhnke
fonte
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/

Marcelo Lacerda
fonte