Vim: copiar e colar terminal a terminal?

3

Estou tentando copiar um grande bloco de código (com recuos preservados) de um terminal vim para outro. Eu queria saber se havia uma maneira simples de fazer isso?

Isso seria considerado uma funcionalidade vim ou uma propriedade do terminal?

    
por Dark Templar 03.01.2012 / 18:58

4 respostas

3

Muitas coisas estão faltando em sua pergunta: qual emulador de terminal você usa? Em qual plataforma? O Vim é compilado com suporte à área de transferência?

Eu estou no Ubuntu, rodando o Vim 7.3 com suporte a área de transferência no Gnome Terminal para YMMV.

Eu sou capaz de selecionar um bloco de código com V em uma instância Vim em uma janela de terminal e colocá-lo em outra instância Vim em outra janela de terminal simplesmente com um clique do meio. Sem o mouse, eu posso puxar a seleção para a área de transferência do sistema com "*y na primeira janela e colocar com "*p na segunda janela.

Pode ser necessário fazer :set paste antes de colar seu bloco de códigos e :set nopaste depois.

Além disso, por que você usa duas instâncias diferentes do Vim em duas janelas de terminal diferentes quando o Vim divide o Windows buit-in?

    
por 04.01.2012 / 08:32
1

Se você estiver usando um terminal padrão como o GNOME Terminal ou o xterm e um Vim configurado adequadamente, isso deve funcionar. Ou seja, você deve ser capaz de usar o mouse para selecionar o texto que deseja copiar, depois clique no botão do meio do mouse no alvo Vim e o texto será colado.

Se o bloco for grande demais para ser facilmente selecionado com o mouse, você poderá selecionar o texto no teclado. Mova o cursor para a primeira linha do bloco, digite V , mova o cursor para a parte inferior do bloco e digite "*y . Em seguida, você pode colar esse texto com o mouse como antes ou digitando "*p ou executando

:put *

Se isso não funcionar, a razão mais provável é que o Vim que você está usando em um terminal não foi compilado com suporte para X, portanto, não pode se comunicar com o servidor X. Você pode descobrir isso executando

:echo has("x11") has("xterm_clipboard")

Se o seu Vim foi compilado com ambos os recursos, o resultado será " 1 1 ".

Se o seu Vim não tiver esses recursos, mas você tiver o gvim instalado, uma solução é executar o gvim no modo de terminal como

gvim -v
    
por 03.01.2012 / 22:15
1

Você deve poder copiar de um terminal segurando Shift ao marcar com o mouse e colar no outro terminal com o clique do meio ou Shift+insert .

    
por 03.01.2012 / 23:14
0

Existem várias peças nesse quebra-cabeças que devem funcionar juntas para fazer o trabalho de copiar / colar.

Primeiro, o "terminal" deve ter uma maneira de trocar dados de uma sessão para outra ... Na maioria das vezes, isso é tratado por um gerenciador de GUI de algum tipo ... (XORG / Windows / etc .. .) que implementa algum tipo de funcionalidade "clipboard".

Segundo, o aplicativo "terminal" deve ser capaz de interagir com qualquer interface da área de transferência ... para manter todos os "terminais" em sincronia ...

Terceiro, o shell (bash / ash / dash / csh / etc ...) precisa ser capaz de acessar as APIs de área de transferência do terminal ...

No futuro, o VIM precisa fazer uso das APIs de área de transferência fornecidas pelo shell em que está sendo executado.

Qualquer uma dessas falhas pode significar que seu aplicativo não pode fazer uso de qualquer tipo de área de transferência entre os terminais.

Tudo o que foi dito ... existem algumas chamadas de API "padronizadas" para a área de transferência ... então, supondo que cada bit tenha feito seu trabalho corretamente, ele deve funcionar.

Agora ... há alguns truques úteis para simplesmente fazer o trabalho sem se preocupar com todas as porcarias da área de transferência ... o que é provavelmente o que você quer começar ...

O VIM permite copiar texto e exportá-lo para um arquivo e, em outro console, importar o texto desse arquivo e veja como:

Primeiro: verifique se você não está no modo "editar" ... (pressione a tecla escape) e mova o cursor para o local que deseja copiar e pressione a tecla v . Vá para o final do que você deseja selecionar ... e pressione y .

Se você quiser colar uma cópia no mesmo documento neste ponto ... mova o cursor para qualquer lugar e pressione p ... mas como estamos copiando para outro terminal, precisaremos abrir um novo arquivo em outro lugar para colar ... assim:

:e ~/temp-file

pressione p para colar o texto ... :w para escrevê-lo. em seguida, faça um :bp para fechar esse arquivo temporário & volte para o arquivo em que você estava trabalhando ...

Agora, no outro terminal, simplesmente vá para o local no arquivo que você deseja colar (não no modo de edição) ... e faça um :r ~/temp-file para ler o conteúdo desse arquivo em seu documento atual. Quando estiver tudo pronto ... certifique-se de excluir o arquivo temporário.

    
por 03.01.2012 / 19:42