web-dev-qa-db-pt.com

Copiar e colar Vim nos terminais

O vim usual yank e paste funciona apenas na mesma janela (mas funciona em arquivos e comandos de fechar/salvar). É possível fazê-lo funcionar entre terminais (arrancar da janela em um terminal e colar em outro) e, em caso afirmativo, como?

20
JP19

Provavelmente a coisa mais simples para você tentar é colocar set clipboard=unnamed na tua .vimrc e reinicie suas sessões do vim.

Isso permite que você execute yank (por exemplo, yy) em uma janela e put (por exemplo, p) em outra janela funcionará, porque todas as sessões do vim estará compartilhando o mesmo buffer de seleção X.

Por outro lado, seu buffer de arranque será substituído assim que você selecionar algum texto em qualquer outra janela de qualquer aplicativo.

Por outro lado, também significa que qualquer coisa que você puxe no vim agora pode ser colada em qualquer aplicativo clicando com o botão do meio.

Se você não gosta dessa maneira, pode digitar "+ ou "* antes de puxar e colocar comandos, por exemplo "+yy para puxar uma linha.

O + os formulários interagem com a área de transferência ("+y é como Ctrl+C, "+p é como Ctrl+V).
O * os formulários interagem com o buffer de seleção ("*y é como clicar com o botão esquerdo e arrastar, "*p é como clique do meio).

Consulte Fazendo seleções da GUI , suporte à seleção X11 e as opções área de transferência e mouse para obter detalhes.

30
Mikel

A solução aceita não funcionará em uma configuração decapitada (no X11). Uma solução que funciona em qualquer ambiente vim é gravar sua seleção em um arquivo temporário :w! /tmp/temp_file colando a partir desse arquivo na outra instância do vim :r! cat /tmp/temp_file

Eu tenho esses dois comandos mapeados como <leader>y e <leader>p no .vimrc:

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

Origem

1
crypdick

Se você deseja copiar um arquivo inteiro para o seu arquivo de destino.

Abra seu arquivo de destino no vim.

Coloque o cursor onde quiser e digite o seguinte:

:r /path_to_file/file.ext

Isso copiará um arquivo inteiro para onde seu cursor está ...

0
no1uknow