Como copiar dados entre instâncias diferentes do vim?

35

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

Eu sei que as seguintes formas são possíveis, mas eu quero uma mais simples:

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

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

por sam 06.09.2011 / 06:31

7 respostas

44

Primeiro você deve instalar uma versão do vim habilitada para a área de transferência. Para acomodar usuários com ambientes não gráficos (por exemplo, usuários do Ubuntu Server), vim e vim-tiny não se encaixam nessa capacidade. Você vai querer instalar o GVim , que será lançado graficamente ou no seu terminal. O GVim substituirá o comando vim .

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

No primeiro vim, digite uma linha no registro + :

"+yy

depois, para colar o registro + no segundo vim:

"+p

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

    
por Jeremy Kerr 06.09.2011 / 07:15
18

A melhor solução que funcionou para mim (que não exige que eu mude meus hábitos de atalhos de teclado) está aqui:

apenas coloque:

set clipboard=unnamedplus

no seu .vimrc .

    
por bhh1988 18.07.2012 / 05:47
8

Eu 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

    
por Samir Sadek 06.05.2015 / 22:17
4

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

Na sessão de origem vi:

  1. Use ESC m a para marcar a primeira linha
  2. Use ESC m b para marcar a última linha
  3. Use :'a,'b w! xfer para gravar o intervalo em um arquivo de rascunho

Na sessão de destino:

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

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

    
por Bill 28.03.2013 / 14:32
2

Na verdade, é bem simples: instale uma versão do vim que suporte a área de transferência. se o seu vim não, pegue qualquer um dos seguintes:

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:

 vim --version|grep clipboard

você deve ver +xterm_clipboard .

    
por FuzzyAmi 26.02.2015 / 09:31
1

Não é exatamente o uso de yy, mas se você selecionar o texto que deseja copiar com o mouse (às vezes você pode precisar usar Shift- [arrastar]), alternar para a outra janela de terminal e fazer um [clique do meio] ou Shift - [clique do meio], 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.

    
por Sergey 06.09.2011 / 07:00
0

Você provavelmente vai odiar essa resposta. Eu costumava trabalhar no vi nos anos 80 em uma variedade de computadores Unix e tive a recente oportunidade de brincar no Linux.

Minha solução para cortar e colar é usar o Putty sendo executado no Windows para acessar minha caixa do Linux.

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

não poderia ser mais fácil. e agora há vim. muito ruim que não estava por aí no meu dia, isso teria me ajudado a defender a máfia do emacs.

    
por srtour2011 05.05.2017 / 18:24

Tags