vim cortar e colar não funciona no Stretch / Debian 9

33

Atualizei aqui alguns servidores VM para o Debian 9.

Agora, ao usar ssh, não podemos copiar e colar entre terminais remotos.

O cursor parece estar fazendo os movimentos e marcando o texto, embora de uma maneira mais engraçada / diferente do habitual, mas nada é copiado para a área de transferência ao executar o comando C / command-V ou copiar e colar no respectivo menu .

Também tentamos fazer os movimentos do mouse com Shift e outras combinações de teclado, sem resultados positivos.

Isso está acontecendo no OS / X, ou seja, Sierra e El Capitan, e no Windows, usando também os terminais mobaXterm.

A situação se deve à consciência do vim de ter um mouse.

Após outras perguntas no Stack Overflow, criei /etc/vim/vimrc.localcom set mouse="r"e set mouse="v; não deu certo.

Finalmente, configure set mouse=""no mesmo arquivo, com algum sucesso moderado.

No entanto, também não funciona bem 100% do tempo. O que mais pode ser feito?

Rui F Ribeiro
fonte
Por que você deseja desativar o suporte do mouse? No Windows, posso copiar e colar muito bem em uma sessão de massa; qual emulador de terminal você está usando no Mac?
Alexej Magura
3
O Terminal regular + o binário ssh que vem por padrão; Mais 2 colegas de trabalho reclamando ... Eles são servidores virtuais sem cabeça, todos eles, apenas no modo de texto. Não ter o recurso de cortar e colar funcionando corretamente é importante para nós.
Rui F Ribeiro
Eu recomendo usar algo como o iTerm2 , acho que esse é o único emulador de terminal que usei além do termo retro que você pode encontrar na loja da Apple, mas não me lembro se aquele suportou copiar e colar no ssh. Você ainda deve poder copiar as seleções de tela. No entanto, lembro-me um pouco de problemas ao tentar copiar porcaria do terminal para o sistema. Escrevi várias funções no meu .zshrc para ajudar a facilitar, mas não tenho certeza se é isso que você realmente está procurando. para.
Alexej Magura
2
Talvez alguém possa registrar uma solicitação para reverter essa alteração (no debian?) Para voltar ao mouse=modo.
21318 steffen

Respostas:

37

A solução é, de fato, definir a opção mouse=apara mouse=r.

O problema de definir isso no modo /usr/share/vim/vim80/defaults.vimcomo a resposta aceita diz é que ele será substituído a cada atualização. Pesquisei muito tempo e acabei com este: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=864074

A solução da primeira maneira é usar arquivos .vmrc locais e configurá-los lá. Então você pode criar um .vimrc ( ~/.vimrc) local para cada usuário e definir suas opções lá. Ou crie um /etc/skelpara que seja criado automaticamente para cada novo usuário que você criar.

Mas quando você usa arquivos .vmrc locais, é necessário definir todas as opções, pois se houver um local .vimrc, defaults.vimele não será carregado! E se não houver local, .vimrctodas as suas configurações serão substituídas defaults.vim.

Eu queria uma configuração global para todos os usuários, que carregasse as opções padrão e depois adicionasse ou substituísse os padrões com minhas configurações pessoais. Felizmente, existe uma opção para isso no Debian: O /etc/vim/vimrc.localserá carregado após o /etc/vim/vimrc. Assim, você pode criar esse arquivo e permitir que os padrões sejam carregados, impedir que sejam carregados novamente (no final) e, em seguida, adicionar suas opções pessoais:

Por favor, crie o seguinte arquivo: /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

(Observe que $VIMRUNTIMEo snippet usado acima tem um valor como /usr/share/vim/vim80/defaults.vim.)

Se você também deseja habilitar o "antigo comportamento de copiar / colar", adicione as seguintes linhas no final desse arquivo:

" 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
I-GaLaXy-I
fonte
4
Essa deve ser a resposta aceita. Também no seu relatório de bug vinculado, acho que podemos nos safar source $VIMRUNTIME/defaults.vim.
Alasdair
11
Finalmente conseguiu implantar isso, excelente, excelente trabalho! +1
Rui F Ribeiro
2
Ainda trabalhando no Debian 10, apenas usando o código-fonte /usr/share/vim/vim81/defaults.vim
Rui F Ribeiro
26

Uma maneira de eliminar o vim da percepção do mouse parece estar comentando a configuração do mouse.

Em /usr/share/vim/vim80/defaults.vimeu comentei a detecção específica do mouse como em:

" 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

(nesses arquivos de configuração do vim ", está iniciando um comentário).

A alteração nos permitiu copiar e colar novamente sem problemas.

Eu concordo com os comentários de que essa não é a solução ideal, pois, de fato, foi substituída por qualquer atualização, a menos que o arquivo de configuração esteja protegido (ou desviado). Na época, e devido a especificidades de uma versão do pacote ou da configuração dos servidores em que eu trabalhava, era o único que funcionava. Como tal, deixo aqui esta resposta e ela deve ser usada apenas como uma solução de último recurso .

Rui F Ribeiro
fonte
2
IMO, esta é uma resposta ruim! Incentivar os usuários a editar um arquivo manipulado pelo gerenciamento de pacotes provavelmente quebrará as coisas inesperadamente no futuro. @ A resposta I-GaLaXy-I é preferível.
Jeremy Davis
11
@ JeremyDavis Concordo com você que esta não é a melhor solução. Na época, era o único que funcionava, por algum motivo desconhecido, e eu tentei várias alternativas. No entanto, agora mais de uma pessoa está me dizendo que a outra solução funciona atualmente, estou aceitando-a como a resposta correta. Eu usei diversões na época, e o arquivo de configuração não foi substituído, no entanto, essa também não é a solução ideal.
Rui F Ribeiro
11

A documentação do Vim para a mouseopção diz

O manuseio xterm dos botões do mouse ainda pode ser usado mantendo a tecla Shift pressionada.

Stefan
fonte
Obrigado por isso. Uso o Vim há anos e não estava ciente desse recurso. Editei sua pergunta para incorporar mais recursos de formatação disponíveis. Bem-vindo ao Unix e Linux !
Anthony G - justiça para Monica
11
O problema é que eu estou usando Terminal no Mac e meus operadores de vidraceiro / MobaXterm no Windows ... não xterm
Rui F Ribeiro
3

Você pode desativar isso sem alterar os arquivos do sistema, criando /etc/vimrc.locale inserindo o seguinte:

set mouse=
Geoffrey
fonte
No período beta, ele não funcionou de forma consistente. Verifique novamente, obrigado.
Rui F Ribeiro
2
Isso não funciona.
LtWorf
Veja a resposta de I-GaLaXy-I acima. Você precisa importar explicitamente defaults.vim e impedir que seja importado.
Richard
Esta multa funciona para mim também, embora eu combinei com resposta da @ I-Galaxy-I (ou seja editada / criado /etc/vim/vimrc.local)
Jeremy Davis
funcionou bem para mim, enquanto dentro de um recipiente debian 9 ... só colocá-lo em ~ / .vimrc
Scott Stensland
1

Muitas pessoas sugeriram, :set mouse=amas eu descobri que apenas :set mouse=rpermite copiar e colar no Vim no Debian 9. Boa sorte!

David Yeager
fonte