Estoy ejecutando la última versión de tmux (desde el repositorio de git) y xclip (0.12), y me gustaría poder usar los enlaces de teclado tipo Emacs para mover el texto copy-mode
, copiar ( M-w
) selecciones en el portapapeles, y pegar ( C-y
) desde / al búfer de copia en el portapapeles.
Hasta ahora he sido capaz de pegar texto C-y
y moverme copy-mode
con enlaces de teclado tipo Emacs, pero aún no puedo copiar texto de un búfer tmux (por ejemplo, en copy-mode
)
Encontré este hilo para copiar todo el búfer en el portapapeles (y viceversa), pero no parece estar funcionando para mí.
Además, en la tmux-users
lista de correo me dijeron que las versiones recientes de tmux (solo en el repositorio de git) proporcionan un comando llamado copy-pipe
. La página del manual dice lo siguiente sobre este comando:
Un comando en acepta un argumento, copy-pipe, que copia la selección y la canaliza a un comando. Por ejemplo, lo siguiente enlazará 'C-q' para copiar la selección en / tmp y también en el búfer de pegado:
bind-key -temacs-copy C-q copy-pipe "cat >/tmp/out"
Parece copy-pipe
que debe usarse en parte para canalizar la selección a otro comando. También parece haber algunos errores tipográficos en esta descripción y en el comando (¿qué es temacs-copy
?)
De cualquier manera, lo que me gustaría hacer es:
Proceso de copiar:
- Ingrese al modo de copia
- Mover el texto que desea copiar utilizando los comandos de navegación de Emacs (es decir
C-f
,C-b
,M-f
,M-b
,C-a
,C-e
etc, para mover el cursor). No hay prefijo para ninguno de estos. - Copie el texto seleccionado en el portapapeles con:
M-w
( sin prefijo tampoco)
Pegado:
- Me gustaría poder escribir
C-y
( sin tener que ingresarcopy-mode
) para pegar texto en el terminal ( sin prefijo tampoco)
He intentado lo siguiente para copiar sin suerte:
bind-key -n M-w run "tmux save-buffer - | xclip -i -selection clipboard"
Sin embargo, pegar funciona muy bien:
bind-key -n C-y run "xclip -o | tmux load-buffer - ; tmux paste-buffer"
Lo extraño es que sé que la " xclip -i -selection clipboard
" parte del comando de copia anterior funciona bien, ya que puedo copiar cosas al portapapeles en la línea de comandos, por ejemplo:
echo "Hello world. How are you?" | xclip -i -selection clipboard
Con todo esto, ¿cómo puedo copiar una selección del modo de copia al portapapeles?
run-shell
lugar 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 acuerdo con este compromiso sugerido por starfryTenga en cuenta que, con Tmux 2.4 (desde esta confirmación ), la sintaxis de enlace ha cambiado. Parafraseo este comentario de Github para resumir el cambio brevemente:
-t
con-T
vi-<name>
con<name>-mode-vi
send-keys -X
Yo tenía:
que necesitaba cambiar a:
Desde el registro de cambios :
fuente
El
-temacs-copy
no es un error tipográfico. El guión inicial significa que esta es una opción para elbind-keys
comando (junto con un argumento para la opción). Es equivalente a-t emacs-copy
, si te gusta más.El modo de copia utiliza un conjunto diferente de enlaces y comandos 1 que el "modo normal". El
copy-pipe
comando solo está disponible en las tablas alternativas de enlaces de "modo". Cuandomode-keys
es asíemacs
, el modo de copia utilizará laemacs-copy
tabla, por lo que debe vincular Mwcopy-pipe
en esa tabla.Tenga cuidado al hacer demasiados enlaces "sin prefijo". Harán que sea difícil escribir esas teclas enlazadas en un programa que se ejecute dentro de tmux (por ejemplo, cuando desee escribir Cy en una instancia en modo tty de Emacs que se ejecute dentro de tmux ). Siempre puede (prefijar) vincular alguna tecla que lo haga
send-keys C-y
, pero eso podría hacer que sea más engorroso escribir si lo necesita con la suficiente frecuencia.1 Solo están disponibles los comandos de movimiento y edición. Con la excepción de
copy-pipe
, estos comandos no toman ningún argumento (esto es lo que la página del manual significa que dice "Un comando en acepta un argumento"; el "en" es probablemente un error tipográfico o un error de edición).fuente
Si bien otras respuestas pueden ayudar, así es como hago lo mismo:
fuente