¿Cómo copiar al portapapeles del sistema desde la salida tmux después de la selección del mouse?

82

Ahora, para copiar al portapapeles del sistema, tengo que seleccionar a través del texto del mouse en la ventana tmux con la Shifttecla. Y luego tengo que ejecutar este comando:

tmux save-buffer - | reattach-to-user-namespace pbcopy

¿Es más fácil guardar en el portapapeles del sistema? Enlace de teclas o mejor, hágalo automáticamente después de soltar Shift.

Mi configuración de tmux: https://gist.github.com/3641580

tomekfranek
fuente
Aquí hay una sesión de preguntas y respuestas similar sobre unix.stackexchange .
crw
2
¿Alguno de estos funciona en MacOS, específicamente Sierra? O mejor dicho, ninguno de ellos lo hace, ¿alguien sabe qué haría? Esta pregunta está etiquetada con osx, pero las respuestas hablan de clic izquierdo y medio ...
dwanderson

Respuestas:

191

Si está utilizando iTerm2, puede copiar texto en la sesión de Tmux, manteniendo presionada la Optiontecla mientras arrastra el mouse para hacer la selección.

Entonces debería ser posible pegar texto en cualquier lugar con Cmd+ Vcomo de costumbre. Lo encontré aquí: http://web.archive.org/web/20131226003700/http://ootput.wordpress.com/2013/08/02/copy-and-paste-in-tmux-with-mouse/

Bondars Rolands
fuente
26
No ayuda con los paneles tmux
Jak S
41
Si tiene paneles, es posible hacer una selección rectangular usando <alt> + <cmd> + selección del mouse.
jomuller
6
La selección rectangular no proporciona la misma funcionalidad para los paneles, ya que la selección puede comenzar y terminar en cualquier columna. Esta solución no está relacionada con tmux sino con el propio terminal. Panes es una característica central de tmux.
Betamos
6
@JakS prefix + Z amplía el panel actual. Entonces no tendrás ese problema. A menos que también estés dentro de una división de vim :)
dgmora
10
En Terminal, puede seleccionar texto manteniendo presionada la tecla "fn". Puede copiar el texto seleccionado con "Cmd + C".
fbessho
58

Si usa iTerm2 3.x, puede hacer que copiar / pegar funcione habilitando Applications in terminal may access clipboard :

ingrese la descripción de la imagen aquí

Simplemente resalte el texto con el mouse para copiarlo en el portapapeles de OS X. No es necesario presionar Optioncomo se sugiere en la respuesta del aceptador.

También puede pegar desde el portapapeles de OS X en tmux con el Cmd+ habitual V.

Jerome Dalbert
fuente
1
Todos los reattach-to-user-namespaceenfoques basados ​​en-no funcionan para mí, porque a menudo utilizo ssh en máquinas Linux. ¡Esta solución, sin embargo, funciona muy bien! ¡Gracias!
jdg
Gran respuesta. Sigo usando <kbd> Option </kbd> cuando estoy en vim y no quiero que el mouse active una selección de vim.
Chad Skeeters
Esto funcionó maravillosamente. No es necesario cambiar ninguna configuración. Gracias.
muammar
esto funciona muy bien con solo tmux, pero ahora, ¿cómo enviar vim yanks que se ejecutan dentro de ese tmux al iterm y al portapapeles del sistema?
Schlow
@schlow Esto probablemente debería ser una pregunta separada de Vim + tmux StackOverflow, pero set clipboard=unnamedresulta que también uso Vim y agregué mi vimrc para ese propósito
Jerome Dalbert
28

Aquí se responde una pregunta similar: /unix/15715/getting-tmux-to-copy-a-buffer-to-the-clipboard

Solución encontrada allí:

# move x clipboard into tmux paste buffer
bind C-p run "tmux set-buffer \"$(xclip -o)\"; tmux paste-buffer"
# move tmux copy buffer into x clipboard
bind C-y run "tmux show-buffer | xclip -i"

Compruebe también: http://awhan.wordpress.com/2012/04/18/tmux-copy-paste-with-mouse/

si ha configurado las siguientes opciones:

panel de selección del mouse

ventana de selección del mouse

notará que no puede seleccionar texto en absoluto.

la solución es usar la tecla shift.

hold down the shift key and then left click and drag across the target text. you must also hold down the shift key and then middle click in order to paste the text.
Blaise
fuente
4
con iterm, use la tecla de opción en lugar de la tecla Mayús. [como se menciona aquí: awhan.wordpress.com/2012/04/18/tmux-copy-paste-with-mouse ]
gatoatigrado
2
Para MacOS, xclip -o=> pbpaste, xclip -i=> pbcopy.
Gingi
23

Para os x, si usa la aplicación "Terminal". Puede desactivar el desplazamiento del mouse y usar las funciones habituales de copiar / pegar (cmd + c / cmd + v):

set-option -g mouse-select-pane off
set-option -g mouse-resize-pane off
set-option -g mouse-select-window off
set-window-option -g mode-mouse off

o puede usar el desplazamiento del mouse y seleccionar texto usando la "tecla fn":

set-window-option -g mode-mouse on
Sergei K
fuente
16
¡el fnconsejo clave es un salvavidas! mucha gente sugiere usarlo, ALTpero no funciona en la última Mac OS x
AK_
1
Mejor aún: combine fn y option para seleccionar usando el modo de columna!
Fletch
¿Alguna forma de cambiar la tecla fn? ¡Usando un teclado externo que no tiene la tecla fn!
CentAu
@CentAu Intenta usar la tecla "Ventana" en su lugar
Piotrek Zatorski
17

En OSX usando tmux versión 2.2 o posterior, agregue lo siguiente a su archivo tmux.conf:

bind-key -t emacs-copy MouseDragEnd1Pane copy-pipe "pbcopy"
bind-key -t vi-copy MouseDragEnd1Pane copy-pipe "pbcopy"

Para tmux versión 2.4, dado que amablemente decidieron cambiar la sintaxis del comando, debe usar:

bind-key -T copy-mode MouseDragEnd1Pane send -X copy-pipe-and-cancel "pbcopy"

Tenga en cuenta que también puede necesitar usar en reattach-to-user-namespace pbcopylugar de simple pbcopy.

Kyle Kloepper
fuente
También en Ubuntu 16.04 esto ya no es un problema en tmux 2.1. Puedo usar los métodos de copiar y pegar predeterminados de la terminal.
Ciro Santilli 郝海东 冠状 病 六四 事件 法轮功
No tengo idea de por qué esto es tan bajo en la lista, ¡esta es la respuesta correcta!
shawkinaw
11

Poner esto en mi archivo ~ / .tmux.conf funciona para mí:

bind y run-shell "reattach-to-user-namespace -l zsh -c 'tmux show-buffer | pbcopy'"

Todas las demás posibles soluciones que encontré fueron copiar algún tipo de contenido vacío en el portapapeles de OSX.

El único problema es que esto parece poner un retorno de carro al final del contenido pegado.

Crcastle
fuente
3
Esto funciona, pero aún requiere que presione PREFIX + y después de haber hecho la selección. ¿Hay alguna forma de copiar texto de una sesión tmux en OS X simplemente seleccionándolo como en una terminal de Linux?
Rafael Bugajewski
6

presione el botón izquierdo del mouse y manténgalo presionado, seleccione el texto en el panel y aún mantenga presionado el botón. luego presione "y", que guarda la selección dentro del portapapeles y sale del modo de selección / copia.

funciona aquí con iTerm 3.1.beta.5, tmux 2.5 y la siguiente configuración:

### copy & paste -------------------------------------------------------
# Use vim keybindings in copy mode
setw -g mode-keys vi
# Setup 'v' to begin selection as in Vim
bind-key -T copy-mode-vi v send -X begin-selection
bind-key -T copy-mode-vi y send -X copy-pipe-and-cancel "reattach-to-user-namespace pbcopy"
# Update default binding of `Enter` to also use copy-pipe
unbind -T copy-mode-vi Enter
bind-key -T copy-mode-vi Enter send -X copy-pipe-and-cancel "reattach-to-user-namespace pbcopy"
bahnfrei
fuente
+1 Finalmente, una solución actualizada que funciona. Gracias. - Parece que está bien anular Enter, sin previo unbind.
ThomasH
Tmux versión 3 y superior usa copy-mode-vimientras que la versión anterior usa copy-mode.
MutantMahesh
5

presione la tecla shift y luego haga clic con el mouse !! Consulta este enlace. http://awhan.wordpress.com/2012/04/18/tmux-copy-paste-with-mouse/

user3023768
fuente
Esta pregunta es muy antigua y su solución es incorrecta para usar con iTerm. La respuesta aceptada actual es la correcta.
OGHaza
Esto funciona para Gnome Terminal, pero esta pregunta es sobre OSX
JKirchartz
3

Pude resolver este problema con CMD+ Cdespués de seleccionar el texto con FN+ mouse drag with left button downde la tmuxventana en la Terminalaplicación de macOS High Sierra.

lemaa
fuente
1

Hice una versión usando netcat hoy que es bastante simple.

https://github.com/base698/tmux-copy-paste-mac-osx

Aquí está el tmux.conf:

bind -t vi-copy 'v' begin-selection
bind -t vi-copy 'y' copy-pipe 'nc localhost 5682'
bind p run-shell 'nc localhost 5683; nc localhost 5683 | tmux load-buffer -' \; paste-buffer

También funciona con el mouse en 1.8

Justin Thomas
fuente
1

Aquí está la solución que estoy usando tmux versión 2.8, macOS Mojave 10.14.1 y Terminal.app.

Después de soltar el botón del mouse, esto elimina la selección mientras se copia al portapapeles del sistema (así como al tmuxbúfer):

bind-key -T copy-mode-vi MouseDragEnd1Pane send-keys -X copy-pipe-and-cancel "pbcopy"
robenkleene
fuente
0

Una solución robusta que funciona con cualquier combinación de mosh + tmux + vim + sesiones anidadas

Después de pasar muchos días abordando esto, la solución más robusta que he descubierto es la solución publicada de Suraj N. Kurapati . La solución funciona localmente con (y sin) tmux v3.2 y / o vim, así como de forma remota con (y sin) tmux y / o vim , usando tanto teclas de modo de copia como una simple selección del mouse.

Si se combina con la solicitud de extracción de Mike Gulick (actualmente abierta) , todas estas combinaciones funcionan con mosh .

Hasta que la solución de Mike se fusione en mosh, puede extraer sus cambios y compilar localmente usando:

Ubuntu:

sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-key C99B11DEB97541F0 \
&& sudo apt-add-repository https://cli.github.com/packages \
&& sudo apt update \
&& sudo apt install -y gh autoconf automake perl protobuf-compiler libprotobuf-dev libncurses-dev zlib1g-dev libutempter-dev libssl-dev pkg-config \
&& mkdir -p ~/tmp/mosh \
&& git clone https://github.com/mobile-shell/mosh ~/tmp/mosh \
&& cd ~/tmp/mosh \
&& gh pr checkout 1104 \
&& ./autogen.sh \
&& ./configure \
&& make \
&& sudo make install

Mac OS:

Creo que primero debe instalar las herramientas de línea de comandos Xcode / Developer de Apple (que, IIRC, ahora se puede hacer simplemente ejecutando gccy saliendo), luego ejecutando:

/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)" \
&& brew install gh autoconf automake
&& mkdir -p ~/tmp/mosh \
&& git clone https://github.com/mobile-shell/mosh ~/tmp/mosh \
&& cd ~/tmp/mosh \
&& gh pr checkout 1104 \
&& ./autogen.sh \
&& ./configure \
&& make \
&& sudo make install

Con estas actualizaciones, ¡finalmente se ha logrado el santo grial del portapapeles!

Sin embargo, esta es información muy nueva, por lo que esta publicación mía es bastante volátil. Por lo tanto:

Por favor, revise mi publicación si:

  1. Me faltan dependencias, etc., o
  2. gh pr checkout 1104Ya no es necesario realizar uno de los cambios de Mike porque se ha fusionado en mosh, o
  3. Ya no es necesario compilar desde la fuente porque los cambios combinados se han enviado a los administradores de paquetes brew / apt / etc.
Jonathan Wheeler
fuente