Copiar texto de um painel tmux para outro (usando o vim)

133

Eu tenho dois arquivos abertos no vim, cada um em um painel tmux. Gostaria de copiar, digamos, 10 linhas de um arquivo para outro.

Como posso fazer isso sem usar o mouse Copy-> Paste?

Patryk
fonte
2
Você pode envolver o tmux , mas geralmente existem maneiras mais simples. As duas instâncias do Vim estão na mesma máquina (local?)? Normalmente, eu usaria apenas um arquivo temporário para isso (por exemplo, selecione visualmente as linhas e :w /tmp/lines, :r /tmp/linesem outro caso). Ou, se o seu Vim souber conversar com a área de transferência do sistema, você poderá usar os registradores +ou *para evitar o arquivo temporário.
31812 Chris Chrissen

Respostas:

194

Você terá que usar os atalhos do tmux. Supondo que o atalho do comando tmux seja o padrão: Ctrl+ b, então:

  1. Ctrl+ b, [Entre no modo de cópia (?).

  2. Mova para o início / fim do texto para destacar.

  3. Ctrlspace

    Comece destacando o texto (no Arch Linux). Quando eu compilei o tmux a partir da fonte no OSX e em outros Linux, Spacenormalmente funciona normalmente. O texto selecionado altera as cores, para que você saiba se o comando funcionou.

  4. Vá para o final oposto do texto para copiar.

  5. Alt+ wCopia o texto selecionado na área de transferência do tmux. (No Mac, use Esc+ w.)

  6. Mova o cursor para o painel oposto do tmux ou para uma janela completamente diferente do tmux. Coloque o cursor onde deseja colar o texto que você acabou de copiar.

  7. Ctrl+ b, ]Cole o texto copiado da área de transferência do tmux.

O tmux é muito bom em mapear comandos para atalhos de teclado personalizados.

Consulte Ctrl+ b, ?para obter a lista completa dos atalhos de teclado definidos.

Alex Leach
fonte
4
Obrigado. Apenas um código lateral: o Alt + w não funcionou no Mac. Alt foi mapeado para Esc por padrão. Portanto, é Esc + w.
22416 Karan
11
se você usar screenatalhos: Ctrl + A [(entre no modo de cópia), Space(comece o destaque), Enter(finalize o destaque), Ctrl + A ](cole).
jfs
11
Vale a pena notar que "enter" funciona para mim, enquanto alt + w não.
Elias Lynn
3
Conforme observado em awhan.wordpress.com/2010/06/20/copy-paste-in-tmux , se você tiver vi combinações de teclas, a etapa 5 deve ser substituída por Enterkey.
Ying Xiong
3
what Se eu precisar copiar e colar em um editor de texto? Por alguma razão, parece que não é possível captar o texto selecionado, mesmo depois de pressionar 'enter' depois de selecionar o texto.
uday
34

Infelizmente, ainda não posso adicionar um comentário à resposta de Alex Leach, então incluirei um adendo aqui para usuários do Mac OS X:

  1. Enter Copia o texto selecionado
Mieczysław Daniel Dyba
fonte
1
obrigado! Estou no Ubuntu Xenial, usando byobu/ tmuxcom todas as configurações padrão, isso funcionou, Alt + w não.
Andrea Zonca 21/03
1
Isso não funciona no OS X Yosemite com tmux 2.0, nem alt + w, nem esc + w :(
#
Funciona para mim também no Windows usando um terminal Zoc.
Jdhao # 22/18
15

Se você estiver usando o vim e o tmux no macOS (Testado no macOS 10.12.2, tmux 2.3):

(Suponha que a combinação de teclas de prefixo do tmux seja prefix. O prefixo é ctrl+ bnos padrões.)

  • Cópia de:
    1. Pressione prefix+ [para entrar no modo de cópia.
    2. Use as setas para ir para o início / fim da seleção de texto.
    3. Pressione ctrl+ space(se você tiver definido ctrl+ spacecomo prefixo, pressione ctrl+ space+ space)
    4. Use as setas para ir para o outro lado da seleção.
    5. Pressione ctrl+ w.
  • Colar:
    1. Pressione prefix+ ]no modo de inserção.
Hamid Rohani
fonte
9

Estou conectando ao meu servidor CentOS em uma máquina Windows usando o cliente ssh do terminal ZOC . Aqui está o que funciona para mim:

  • Entre no modo de cópia: <prefix>+[
  • Iniciar cópia: <Space>
  • Copiar texto: <Enter>
  • Colar texto: <prefix>+]
jdhao
fonte
2

Você pode usar a placa de grampo do sistema com "* ye" * p em vez dos normais y e p.

Johan
fonte
1
Para usar prancheta sistema que você tem que usar "+2yy- copiar duas linhas para X11 clipboard "+dd- linha de corte para X11 clipboard "+p- colar X11 clipboard
Patryk
Preciso digitar alguma coisa antes de usar esses comandos?
9608 Thomas Ahle
@ThomasAhle, no .. são literalmente aspas duplas ("), seguidas de mais (+) seguidas de 2ys (y). Verifique se você está no modo normal. Se você estiver no modo normal, poderá usar h,j,k,lpara Também vi algumas vezes na minha VM ubuntu, o registro "+" desaparecer, por motivos desconhecidos. Para verificar se você possui o +registro, digite :rege verifique se há uma sequência "+na primeira coluna.
alpha_989
Sim, é isso, esta é a resposta. Muito mais simples do que os outros sugeridos (usando o tmux copy / paste) e isso não atrapalha os números de linha. Isso causaria problemas se você remapeasse o padrão ye ppara "+ye "+p?
ryan
1

Se você tiver vimaberto, é melhor usar a pasta copiar do vim para copiar texto.

A pasta de cópia do Tmux funcionará, no entanto, existem várias desvantagens.

Primeiro, ao copiar várias linhas de texto, você precisará selecionar várias linhas. A pasta de cópia do tmux normalmente não entende que vimtenha números de linha ou que haja marcações na sarjeta do vim (como números relativos / números absolutos). Como resultado, ele também será copiado.

Em segundo lugar, descobri que, se o texto tiver uma formatação específica para um idioma e você tentar copiar e colar diretamente usando o tmux para o vim, isso atrapalhará a formatação. Isso pode ser evitado usando set paste!. No entanto, isso requer muito mais trabalho.

Use "+ypara copiar e "+pcolar

Vimfornece nativamente um método para copiar e colar entre o buffer do vim e a área de transferência do sistema, usando "+you "*y. Em seguida, cole usando "+pou "*p. Isso evitará copiar os números relativos na sarjeta ou outras marcas aleatórias que não são relevantes para o vim

alpha_989
fonte
0

Algumas opções para o uso do vim, já que a sequência de atalhos do tmux é um pouco longa e acho difícil lembrar

Como as respostas acima, você pode usar "+ye "*ypara copiar e, em seguida, "+pe "*prespectivamente para colar. Se você quiser que o vim use a área de transferência por padrão, basta usá-lo y/pdiretamente.

set clipboard=unamed "sets the default copy register to be *
set clipboard=unamedplus "sets the default copy register to be +

comando source for clipboard: https://vi.stackexchange.com/questions/84/how-can-i-copy-text-to-the-system-clipboard-from-vim

Avi Areman
fonte