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


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 )


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.


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


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.


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.


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.


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.


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"+


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.


0

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



0

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


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


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


não, isso não vai funcionar quando você cola fora do vim
barlop
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.