Estou executando a versão mais recente do tmux (do repositório git) e do xclip (0.12) e gostaria de poder usar as ligações de teclado do tipo Emacs para mover o texto copy-mode
, as M-w
seleções de copy ( ) para a área de transferência e paste ( C-y
) de / para o buffer de cópia na área de transferência.
Até agora, consegui colar texto C-y
e me movimentar copy-mode
com as ligações de teclado do tipo Emacs, mas ainda não consigo copiar o texto de um buffer tmux (por exemplo, em copy-mode
)
Encontrei este tópico para copiar todo o buffer para a área de transferência (e vice-versa), mas não parece estar funcionando para mim.
Além disso, na tmux-users
lista de emails, disseram-me que as versões recentes do tmux (apenas no repositório git) fornecem um comando chamado copy-pipe
. A página do manual diz o seguinte sobre este comando:
Um comando aceita um argumento, copy-pipe, que copia a seleção e a envia para um comando. Por exemplo, o seguinte ligará 'C-q' para copiar a seleção em / tmp e também no buffer de colagem:
bind-key -temacs-copy C-q copy-pipe "cat >/tmp/out"
Parece que copy-pipe
deve ser usado em parte para canalizar a seleção para outro comando. Também parece haver alguns erros de digitação nesta descrição e no comando (o que é temacs-copy
?)
De qualquer forma, o que eu gostaria de fazer é:
Copiando:
- Entre no modo de cópia
- Mover-se para o texto que deseja copiar usando comandos de navegação Emacs (ou seja
C-f
,C-b
,M-f
,M-b
,C-a
,C-e
etc, para mover o cursor). Não há prefixo para nenhum deles. - Copie o texto selecionado na área de transferência com:
M-w
( sem prefixo )
Colagem:
- Eu gostaria de poder digitar
C-y
( sem precisar digitarcopy-mode
) para colar texto no terminal ( sem prefixo )
Tentei o seguinte para copiar sem sorte:
bind-key -n M-w run "tmux save-buffer - | xclip -i -selection clipboard"
No entanto, colar funciona muito bem:
bind-key -n C-y run "xclip -o | tmux load-buffer - ; tmux paste-buffer"
O mais estranho é que sei que a xclip -i -selection clipboard
parte " " do comando de cópia acima funciona bem, pois posso copiar as coisas para a área de transferência na linha de comando, por exemplo:
echo "Hello world. How are you?" | xclip -i -selection clipboard
Com tudo isso, como posso copiar uma seleção do modo de cópia para a área de transferência?
run-shell
vez derun
bind -Tcopy-mode M-w send-keys -X copy-pipe "xclip -i -sel p -f | xclip -i -sel c "
.bind-key -n C-y run-shell "xclip -o | tmux load-buffer - ; tmux paste-buffer"
de acordo com este commit sugerido por starfryObserve que, com o Tmux 2.4 (desde esse commit ), a sintaxe da ligação foi alterada. Parafraseando este comentário no Github para resumir brevemente a alteração:
-t
por-T
vi-<name>
por<name>-mode-vi
send-keys -X
Eu tinha:
que eu precisava mudar para:
No changelog :
fonte
O
-temacs-copy
não é um erro de digitação. O traço principal significa que esta é uma opção para obind-keys
comando (junto com um argumento para a opção). É equivalente a-t emacs-copy
, se você gosta mais disso.O modo de cópia usa um conjunto diferente de ligações e comandos 1 que o "modo normal". O
copy-pipe
comando está disponível apenas nas tabelas de ligações "mode" alternativas. Quandomode-keys
estiveremacs
, o modo de cópia usará aemacs-copy
tabela, portanto, é necessário vincular Mwcopy-pipe
nessa tabela.Cuidado ao criar muitas ligações "sem prefixo". Eles dificultam a digitação dessas chaves associadas a um programa em execução no tmux (por exemplo, quando você deseja digitar Cy em uma instância de modo tty do Emacs em execução no tmux ). Você sempre pode (prefixo) vincular alguma chave
send-keys C-y
, mas isso pode dificultar a digitação, se você precisar com frequência suficiente.1 Apenas comandos de movimento e edição estão disponíveis. Com exceção de
copy-pipe
, esses comandos não aceitam argumentos (é o que a página de manual significa com "Um comando aceita um argumento"; o "in" é provavelmente um erro de digitação ou edição).fonte
Embora outras respostas possam ajudar, veja como faço o mesmo:
fonte