Como copiar nos terminais?


11

Estou usando o sistema Linux. Dois vims são abertos em dois terminais. Agora, eu gostaria de copiar o texto de A para B. Uma maneira de fazer isso é selecionar texto em A, usar o mouse para copiar e depois mudar para B, no modo de inserção, o comando <c-r>+colará o texto.

Existe alguma maneira de executá-lo sem usar o mouse? como "+yyem A, quando mudar para B o<c-r>+,? Eu explorei algumas combinações em vão. E procurei por "copiar nos terminais", mas não encontrei nada.

O usuário @statox sugere uma solução usando o modo visual, ou seja, v$"+yem A, quando alternar para B o<c-r>+,.

Existe alguma maneira simples de copiar o texto em A sem entrar no modo v? É certo que entrar no modo v não envolve muitas batidas de tecla, apenas pergunto se há uma maneira melhor. Por exemplo. se o cursor estiver no meio de uma linha, yycopia a linha inteira (para registrar "), enquanto 0v$yfaz o mesmo com pressionamento de tecla extra.

Ou, minha pergunta pode ser reduzida para se houver alguma maneira com menos pressionamentos de tecla do que 0v$"+ypara copiar , para que eu possa usar <alt-tab>o<c-r>+para colar.


Qual é o seu problema exato? Você parece ter a solução: selecione seu texto com o modo visual (por que usaria o mouse?) Coloque-o no registro da área de transferência com "+ye, na outra instância do vim, coloque o registro da área de transferência "+p. Ou duplicar isso ?
statox

Você não precisa entrar no modo visual para puxar alguma coisa. Você pode seguir ycom um movimento ( :help motion.txt) ou um objeto ( :help object-select). Se você arrancar e colar entre instâncias Vim muitas vezes, você pode achar que ajuste clipboardpara incluir unnamedou unnamedplusútil. Veja :help 'clipboard'. Em seguida, copiar entre instâncias deve funcionar.
garyjohn

11
O ponto do meu comentário não era o modo visual, na verdade, tenho problemas para entender o seu problema: no começo, pensei que era o fato de copiar algum texto de um terminal para outro, agora parece que se trata de usar tão poucas teclas quanto possível puxar para o registro da área de transferência. Se esse for o segundo caso, o comentário de Garyjohn é relevante.
statox

11
0v$é o mesmo que V. E é fácil fazer um mapeamento para "+y: :nnoremap <Leader>y "+y. Então isso reduz para V\y.
Martin Tournoij 02/09/2015

@Carpetsmoker sua solução é boa. Gostaria de tomá-lo como a solução ideal se você o colar na região de resposta. Parece que sem o mapa das teclas, o melhor que podemos fazer pela cópia na minha pergunta é V"+y: 4 pressionamentos de tecla.
User3813057

Respostas:


9

Você pode verificar se o Vim foi criado com o suporte da área de transferência com:

:echo has('clipboard')

Se a saída for 1, o seguinte deve ser suficiente para atingir seu objetivo:

"*y    in source Vim
"*p    in destination Vim

Você pode facilitar ainda mais a sincronização do registro da área de transferência e do registro padrão com esta configuração em vimrc:

set clipboard^=unnamed

Se a saída de :echo has('clipboard')for 0, considere instalar um Vim apropriado como vim-gtkou vim-gnome(o nome do pacote pode ser diferente de distribuição para distribuição).


1

Eu acho que a solução que você já mencionou na sua pergunta é a correta. Se você deseja reduzir o número de pressionamentos de teclas, basta criar um mapa, por exemplo

vmap <leader>y "+y
vmap <leader>d "+d
nmap <leader>p "+p
nmap <leader>P "+P
vmap <leader>p "+p
vmap <leader>P "+P

Veja a segunda entrada aqui .


1

Para estender a resposta do @ romainl, (com suporte à área de transferência), você pode usar registros compartilhados com a área de transferência do sistema.

"+y    To yank/copy from a vim-terminal
"+p    To paste in destination vim-terminal

"*y    To yank/copy from a vim-terminal
"*p    To paste in destination vim-terminal

Ao executar esses comandos, você y anking / copiar / armazenar conteúdos seleccionados nos registos, e p asting-los para o destino Vim-terminal. Estes dois registros especiais +e *são compartilhados com a ampla área de transferência do sistema (e, portanto, muitos outros programas como o navegador web, gedit etc). O registro +está associado ao buffer de copiar / colar e *ao buffer de seleção (aquele que insere uma cópia da seleção com um clique do meio em um campo de texto no Ubuntu, por exemplo) e pode ser colado usando ctrl + v( ctrl + shift + vno terminal gnome).


1

1) No Fedora, uso a seguinte configuração:

dnf install vim-X11

O vim-X11 vem com suporte à área de transferência - talvez em outras distros seja semelhante.

2) Defina um alias no meu .bashrc

alias vim="vimx"

3) Em .vimrc:

set clipboard=unnamedplus

Agora, o puxão usual no Vim entra na área de transferência do sistema e todo Ctrl-C fora do vim pode ser colado no vim.


0

Se você estiver usando um Mac (OSX), poderá instalar o bpcopy (usando o brew install pbcopy - consulte http://brew.sh/ para obter mais detalhes). Em seguida, execute o seguinte (linha de comando de forma direta) sem tocar no mouse:

EXEMPLO:

1) No TERMINAL # 001 :

cat /tmp/stuff.txt | pbcopy

2) Você pode alternar para o terminal # 002 (sem usar o mouse) usando as teclas de atalho embutidos em aplicação de terminal da OSX: command+i

3) No TERMINAL # 002 : Abra o novo arquivo no vim

vi newfile

4) Coloque o vim no modo de inserção comi

5) Insira o texto da área de transferência com command+ V(para colar da área de transferência em um Mac)

6) Aproveite o resto do seu dia!

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.