Como copiar dados entre diferentes instâncias do vim?

41

Se eu usar o primeiro vim para copiar uma linha (com yy), como colo no vim de outro terminal (com p)? Existe algum comando ou configurações que podem fazer isso? Posso copiar e colar na área de transferência do sistema global?

Sei que as seguintes maneiras são possíveis, mas quero uma mais simples:

  1. Não quero sair do primeiro vim e reabrir o segundo vim.

  2. Eu não quero usar janela separada (com :sp).

sam
fonte

Respostas:

49

Primeiro você deve instalar uma versão do vim habilitada para área de transferência. Para acomodar usuários com ambientes não gráficos (por exemplo, usuários do Ubuntu Server) vime vim-tinynão se conecte a esse recurso. Você desejará instalar o GVim Instale o GVim , que será lançado graficamente ou em seu terminal. O GVim substituirá o vimcomando.

Você pode puxar o texto para o 'buffer de corte' do primeiro vim e colar o texto no segundo vim. Para copiar para o buffer de corte global, use o +registro. A "tecla permite especificar qual registro usar ao executar uma operação de puxar ou colar.

No primeiro vim, coloque uma linha no +registro:

"+yy

em seguida, para colar do +registro no segundo vim:

"+p

Para mais informações sobre os registros disponíveis, confira :help registers. Você também pode usar "+ppara colar o texto copiado de qualquer outra fonte no seu sistema.

Jeremy Kerr
fonte
Por tudo o que vale a pena, se você instalar o GVim (o pacote pode ser chamado de vim-gnome), as entradas do menu frequentemente fornecerão os atalhos de teclado que serão chamados.
zpletan 6/09/11
11
Não quero instalar o Gvim. Como faço isso no vim?
trusktr
11
@trusktr, na verdade, isso também funciona no vim. Nesta sessão de perguntas e respostas , diz que você precisa do vim 7.3.74 (o que significa Ubuntu 11.10 ou posterior).
Lumbric 28/03
de alguma forma, isso não está funcionando se você tiver um vim iniciado dentro do tmux e outro iniciado normalmente fora - alguma chance de você saber como solucionar esse problema?
serup 5/17
"*yy, "*pTambém funciona. se você acertar :reg, você vai ver que o registro da estrela
Elquimista
20

A melhor solução que funcionou para mim (que não exige que eu mude meus hábitos de combinação de teclas) está aqui: https://stackoverflow.com/questions/9166328/how-to-copy-selected-lines-to-clipboard-in- vim

apenas coloque:

set clipboard=unnamedplus

no seu .vimrc.

bhh1988
fonte
Na verdade, eu precisava adicionar o set clipboard=unnamedplusGVim instalado. No entanto, consegui usar o xfce4-terminal para o Vim em vez do programa GVim real.
jbrock
9

Gosto da solução do Bill e criei um mapeamento:

vmap <leader>y :w! /tmp/vitmp<CR>                                                                   
nmap <leader>p :r! cat /tmp/vitmp<CR>

o primeiro no modo visual copia tudo em / tmp / vitmp e o segundo copia o conteúdo de / tmp / vitmp no arquivo

Samir Sadek
fonte
solução simples e direta - à maneira antiga - graças este fez por mim
Serup
O que eu preciso digitar no Vim depois de adicionar isso ao .vimrc?
Vitaly Zdanevich
Você precisa configurar o vim para poder usar a tecla de líder seguida de y para copiar, chave de líder seguida de p para colar.
Samir Sadek
11
É esse que funciona. usando "*yparece estar quebrado em servidores
ospider
Oh meu. Eu estive pesquisando por horas sobre esse problema usando o vim no tmux no docker. Meu vimrc normal, que já tinha unename / unnamedplus, NÃO funcionou no vim no tmux no docker. Nem fiz nada que encontrei na internet. No entanto, isso parece funcionar em todas as máquinas! Na janela de encaixe, no Mac e no Arch nativamente. Obrigado!!
Tommy
5

Eu me movo entre várias máquinas da família Unix e descobri que a seguinte sequência sempre funciona para mim:

Na fonte vi session:

  1. Use ESC m apara marcar a primeira linha
  2. Use ESC m bpara marcar a última linha
  3. Use :'a,'b w! xferpara gravar o intervalo em um arquivo inicial

Na sessão de destino:

  1. Mover o cursor para a linha de inserção
  2. Use ESC :r xferpara ler texto

Eu sei que não é bonito, mas sempre funciona para mim!

Conta
fonte
2

Na verdade, é bastante simples: instale uma versão vimcompatível com a área de transferência. caso vimcontrário, obtenha uma das seguintes opções:

sudo apt-get install vim-athena
sudo apt-get install vim-gnome
sudo apt-get install vim-gtk

Uma vez instalado, basta executar vim. Você também pode verificar se a área de transferência está ativada executando:

 vim --version|grep clipboard

você deveria ver +xterm_clipboard.

FuzzyAmi
fonte
Esta resposta chega ao cerne do problema: sua versão do Vim tem o recurso de transferência ativado? Caso contrário, nenhuma dessas outras respostas fará qualquer diferença. Faça "vim --version" e procure por "+ clipboard". Eu acho que + xterm_clipboard se aplica apenas se você quiser suporte para a área de transferência do X11, mas se você estiver no Ubuntu, também precisará disso.
Ray
2

Provavelmente todos vocês odeiam esta resposta. Eu trabalhava no vi nos anos 80 em uma variedade de computadores Unix e tive a ocasião recente de brincar no Linux.

Minha solução para recortar e colar é usar o Putty em execução no Windows para acessar minha caixa do Linux.

O Putty permite copiar qualquer txt em sua janela, simplesmente destacando-o. você pode ir para outra janela / sessão do Putty e clicar com o botão direito do mouse para colar.

não poderia ser mais fácil. e agora há vim. Pena que não estava por aí nos meus dias, teria me ajudado a defender a máfia do emacs.

srtour2011
fonte
1

Não é exatamente o uso de yy, mas se você selecionar o texto que deseja copiar com o mouse (às vezes pode precisar usar Shift- [arrastar]), alterne para a outra janela do terminal e faça um [clique no meio] ou Shift- [meio clique] lá, o texto será inserido no seu ponto de inserção atual.

Isso funciona para a maioria dos programas de linha de comando e GUI, não apenas para o vim.

Sergey
fonte