Copiando texto fora do Vim com set mouse = a enabled

232

Após a ativação set mouse=a, o texto copiado dentro do Vim não será colado fora do Vim. Alguém sabe uma maneira de consertar isso?

Aqui, a seleção de texto com o mouse ativa o modo visual e desativa a Copyopção no menu pop-up:

insira a descrição da imagem aqui

lyuba
fonte
2
Se o seu vim for compilado com +clipboarde mouse=a, você poderá copiar / colar de / para o vim sem usar o menu pop-up do terminal. Você pode verificar se clipboardestá ativado usando vim --version.
Jérôme Pouiller 14/12/16
@ Jezz Worth esclarecendo que A) mouse=anão é uma opção de compilação, é algo no vimrc B) Quando o vim foi compilado, +clipboardele permite copiar / colar quando :set numberestá ligado e sem copiar / colar os números, embora talvez você ainda precise fazer alguma coisa mapeamentos C) Não é necessário recompilar o VIM, ele pode estar ativado no vim em alguns gerenciadores de pacotes suportados por qualquer SO. No osx, o vim do brew o possui, embora o vim padrão do osx não. Minha resposta menciona esse rex.
barlop
Talvez a instalação xselfuncione para você também, você pode selecionar texto com o editor ou com o mouse e pressionar ctrl+cpara copiar o texto, como é para o neovim, github.com/neovim/neovim/issues/7945#issuecomment-361970165
Naeem Baghi,

Respostas:

426

Pressione shiftenquanto seleciona com o mouse. Isso fará com que a seleção do mouse se comporte como se mouse=anão estivesse ativada.

Nota: esse truque também se aplica a "colar no botão do meio": se você deseja colar no texto vim que foi selecionado fora, pressione shiftenquanto clica no botão do meio. Apenas verifique se o modo de inserção está ativado quando você faz isso (você também pode :set pasteevitar efeitos inesperados).

OS X (mac): mantenha pressionada a tecla alt / option enquanto seleciona ( fonte )

François
fonte
2
OK, esta é realmente a solução. Mas e se você quiser selecionar muito código além da tela? (então você tem que se deslocar e seleccionar ao mesmo tempo)
Ozkan
3
Há também uma opção para usar a seleção de blocos pressionando <kbd> ctrl </kbd> + <kbd> shift </kbd> + botão esquerdo do mouse para iniciar a seleção de blocos. O botão do meio do mouse cola o conteúdo copiado em outra janela.
micrub
6
Se você tiver números de linha (como mostra a captura de tela), ao selecionar o uso do ALT no Mac OS X, os números de linha também serão copiados. Nesse caso, é melhor usar ALT + CMD ao selecionar o modo Seleção de bloco, para evitar a seleção dos números.
Aaron
16
Para o Mac Terminal, depois do OS X 10.11 El Capitan , a Fnchave é o caminho certo a seguir. Ou seja, (com mouse=aativar) selecionando o texto enquanto pressiona a Fntecla, use o CMD + C para copiar e colar para onde quiser.
YaOzI
1
Não sei como essa resposta tem tantos votos positivos. Se você ativou o suporte ao mouse para evitar a cópia de números de linha , essa sugestão será totalmente inútil.
Stelios Adamantidis
49

Use ", +, ydepois de fazer uma seleção visual. Você não deve usar o comando de cópia do terminal, pois copia o que o terminal vê em vez do conteúdo real. Aqui está o que isso faz:

  • ", +diz ao Vim para usar o registro nomeado +para a próxima exclusão, puxar ou colocar. O registro nomeado +é um registro especial, é o registro da área de transferência do X11. (Em outros sistemas, você usaria *, penso, ver :help clipboarde:help x11-selection )
  • y é o comando yank, que informa ao Vim para colocar a seleção no registro nomeado anteriormente.

Você pode mapeá-lo assim:

:vmap <C-C> "+y

E depois destaque algo com o mouse e pressione Control-Cpara copiá-lo.

Esse recurso funciona apenas quando o Vim foi compilado com a +xterm_clipboardopção Corra vim --versionpara descobrir se tem.

Josh Lee
fonte
4
Ou possivelmente "*ydependendo do sistema operacional.
frabjous
Isso funcionou! No entanto, a combinação é bastante complexa, com 4 botões, na verdade. Provavelmente, preciso mapear o outro enquanto estiver usando a opção "shift" da outra resposta.
Lyuba
Mapeamento funciona perfeitamente bem também :) Agora eu não sei qual das respostas de vocês eu deveria marcar como aceite :)
Lyuba
2
Para mim, essa é uma solução melhor do que a resposta aceita, porque com esse método, os números de linha não são copiados.
Saulo Silva
Que tal +clipboard? E o que dizer +clipboardcom isso xterm_clipboard?
barlop 17/05/19
18

Em vez de set mouse=ausar set mouse=rno .vimrc

Nefeline
fonte
1
Mas ele desabilita a rolagem
Makesh
3
Por favor, diga o porquê. À primeira vista, isso parece basicamente o mesmo que desabilitar completamente o modo mouse, o que não é o ponto da questão.
Mikel
@Mikel direita, ver a minha resposta também a resposta de Josh Lee pode ajudar
barlop
Infelizmente, isso também copiará os números de linha se eles estiverem ativados.
precisa saber é
17

No OSX, use em fnvez de shift.

ssasa
fonte
funcionou para mim com a optionchave, que é a altchave equivalente no host do MacOS. Era um terminal remoto no debian9. não funcionou adicionando um dos set mouse=a/ set mouse=rno /etc/vim/vimrccontrole remoto.
mrtipale
5

No Ubuntu, é possível usar as ligações copiar e colar X-Term no VIM (Ctrl-Shift-C e Ctrl-Shift-V) no texto que foi ocultado usando a tecla Shift.

Marc Gibbons
fonte
4

Outra opção do OSX-Mac é desmarcar View->Allow Mouse Reporting(ou pressionar ⌘-R para alterná-la.) Isso permite alternar entre a interação e a seleção do mouse, o que pode ser útil ao selecionar e copiar / colar alguns bits, porque você não possui para manter pressionada uma tecla modificadora.

Nota para Multilinha com números de linha:

Normalmente, tenho números de linha ativados, portanto, isso também copiará os números de linha se você selecionar várias linhas. Se você deseja copiar várias linhas sem os números de linha, desative os números com :set nonue poderá :set nureativá-los após concluir a cópia.

reor
fonte
1

Você pode usar :set mouse&na linha de comando do vim para ativar a cópia / colar do texto selecionado usando o mouse. Você pode simplesmente usar o botão do meio do mouse ou shiftinsertcolá-lo.

Madhu
fonte
Então, quando tiver :set number, destaque os números. Então não é muito bom. Então você desfaz o bem feito porset mouse=a
barlop 16/05/19
1

As configurações de compilação com as quais o vim foi compilado fazem parte do problema. vim --versionmostra isso.

No OSX, o vim padrão possui -clipboard Mas você precisa+clipboard

No osx, você pode e, aparentemente, geralmente deve usar o macvim. Você pode fazer brew cask install macvim Aquele que tem +clipboard.

Eles terão dois vims.

~$ ls -l /usr/bin/vim   <--- default vim
-rwxr-xr-x  1 root  wheel  1745984 15 Jul  2017 /usr/bin/vim

~$ ls -l /usr/local/bin/vim   <-- macvim, installed recently via that mentioned brew line. 
lrwxr-xr-x  1 apple  admin  42 16 May 23:32 /usr/local/bin/vim -> /Applications/MacVim.app/Contents/bin/mvim
~$ 

rodar o vim rodará o macvim ' , pois você /usr/local/bindeve estar antes /usr/binno caminho, embora você possa verificar com which vim.

rodar o vim (para rodar o macvim), tudo bem, mas você pode mapear o vi para o macvim ', caso contrário, rodar o vi permanece no vim padrão! Você pode reescrever ou excluir (com rm) e recriar o link do vi sym, com ln. E para fazer isso sem um erro 'operação não permitida ", é necessário (temporariamente) desativar o SIL. Https://apple.stackexchange.com/questions/208478/how-do-i-disable-system-integrity-protection- sip-aka-rootless-on-macos-os-x .

macvim tem +clipboardcomo mostrado porvim --version

Aqui está um trabalho ~/.vim/vimrccom apenas as linhas necessárias.

:set mouse=a
:map <leader>c "+y
:map <leader>v "+p

A chave líder padrão é a barra invertida.

Li uma sugestão de que se deve usar a chave líder .. (certamente o controle já possui muitas chaves em uso, portanto a sugestão era não usar o controle. Não sei se isso se aplica à chave de comando também, mas de qualquer maneira).

Com esse mapeamento mencionado, \cfará o "+yque será copiado do registro conhecido como + para a área de transferência. E \virá colar do registro conhecido como +.

Portanto, é uma cópia / pasta que funciona entre janelas.

Outro sistema operacional pode exigir, em "*vez de"+

barlop
fonte
Ambos os vims têm -xterm_clipboard. Talvez um +xterm_clipboardseja benéfico de alguma forma, mas não importa para esta solução.
barlop 17/05/19
0

Se você estiver usando a sessão Putty, ela copia automaticamente a seleção. Se tivermos usado a opção "set mouse = a" no vim, selecionar usando Shift + arrastar o mouse seleciona o texto automaticamente. Precisa fazer check-in X-term.

Amitesh Anand
fonte
0

em ... Continue pressionando Shifte clique no botão direito do mouse

levinit
fonte
0

Expliquei acidentalmente como desligar set mouse=a, quando reli a pergunta e descobri que o OP não queria desligá-lo. De qualquer forma, para quem procura como desligar o mouse ( set mouse=) centralmente, deixo uma referência à minha resposta aqui: https://unix.stackexchange.com/a/506723/194822

Holger Böhnke
fonte
0

Manter o turno ao copiar e colar com a seleção funcionou para mim

Tito Kipkurgat
fonte
É isso que a resposta aceita diz. Para agradecer a um usuário - depois de ter essa reputação, você poderá votar novamente na postagem dele.
Wai Ha Lee
0

Adicione set clipboard=unnamedao seu.vimrc . Portanto, ele usará o registro da área de transferência '*' em vez do registro sem nome para todas as operações de arrancar, excluir, alterar e colocar (observe que isso não afeta apenas o mouse).

O comportamento do registro '*' depende da sua plataforma e de como vimela foi compilada (ou se você usarneovim ).

Se não funcionar, você pode tentar com set clipboard=unnamedplus, mas essa opção só faz sentido nos sistemas X11.

Jérôme Pouiller
fonte
-3

No modo ESC, quando definir mouse = a, selecione o texto usando o mouse. Isso ativaria o modo visual no vim. Em seguida, você pode pressionar 'y' para puxar o texto selecionado e 'p' para colá-lo onde quiser. Isso acontece apenas no vim.

Avishek
fonte
não, isso não vai funcionar quando você cola fora do vim
barlop