Mover el panel tmux a la ventana

228

¿Cómo muevo un panel existente a otra ventana en tmux cuando tengo varias ventanas y viceversa?

Vengo de la pantalla , donde puedo cambiar al panel y luego cambiar las ventanas hasta llegar al que quiero; tmux no parece permitir esto.

mrlanrat
fuente

Respuestas:

209

El comando para hacer esto está join-paneen tmux 1.4.

join-pane [-dhv] [-l size | -p percentage] [-s src-pane] [-t dst-pane]  
    (alias: joinp)
    Like split-window, but instead of splitting dst-pane and creating
    a new pane, split it and move src-pane into the space.  This can
    be used to reverse break-pane.

Para simplificar esto, tengo estos enlaces en mi .tmux.confpara eso:

# pane movement
bind-key j command-prompt -p "join pane from:"  "join-pane -s '%%'"
bind-key s command-prompt -p "send pane to:"  "join-pane -t '%%'"

El primero toma el panel de la ventana de destino y lo une a la actual, el segundo hace lo contrario.

Luego puede volver a cargar su sesión tmux ejecutando lo siguiente desde la sesión:

$ tmux source-file ~/.tmux.conf
jasonwryan
fuente
Estoy probando este método, pero cuando pongo su código en mi archivo .tmux.conf y hago Ctrl-b, j, parece que no sucede nada.
mrlanrat
2
Se necesita al menos 2 ventanas abiertas, con un par de paneles en cada uno: después haga clic Prefix+sy entrar en el nombre de la ventana en el indicador para enviar el panel de la ventana ...
jasonwryan
Todavía no tengo suerte con esto, no pasa nada. Tengo la sensación de que tmux no está leyendo el archivo .tmux.conf porque no responde en absoluto a Ctrl-b, j o ​​Ctrl-b, s. (estas son las únicas 2 líneas en el archivo de configuración)
mrlanrat
77
@mrlanrat Creo que debe anteponer el número de la ventana con dos puntos. Vea mi respuesta a continuación.
Bruno Bronosky 01 de
1
¿A qué se refiere el '%%'?
oligofren
152

join-pane es la respuesta. Yo también estaba teniendo problemas con mis intentos de usarlo según la documentación de tmux. Descubrí que los modificadores -t y -s parecen aceptar [sesión]: ventana y no [sesión:] ventana. Es decir que especificar la sesión es opcional, pero incluir: es obligatorio. (Estoy usando tmux 1.5)

Por lo tanto, para agregar un panel a la ventana actual y colocar la ventana 1 en el panel, el comando sería (Ctrl-B o lo que sea su clave de enlace, seguido de) ...

:join-pane -s :1

Luego puede dividirlos con un panel de interrupción que, de forma predeterminada, es: Ctrl-B! Si desea vincularlo a un acceso directo, le sugiero que NO anule un enlace predeterminado como s, porque en el futuro buscará en Internet una respuesta que implique elegir sesión y no funcionará en su sistema. ¡Observe que el panel de ruptura está vinculado a! y @ está justo al lado y no está vinculado a nada de forma predeterminada. Por eso sugiero este enlace ...

bind-key @ command-prompt -p "create pane from:"  "join-pane -s ':%%'"

Alternativamente, para tener un selector interactivo ...

bind-key @ choose-window 'join-pane -h -s "%%"'

Alternativamente, para unirse siempre a la ventana visitada más recientemente ...

bind-key @ join-pane -h -s !

NOTA: Esto -hhace que apile los paneles horizontalmente (con una división vertical) en oposición al comportamiento predeterminado que es el reverso.

Lo más importante es que APRENDAS lo que elijas atajar. Porque si solo lo configura y lo olvida, se lo atormentará cuando se encuentre en un servidor extranjero. Y seamos sinceros, lo más importante que le brinda un multiplexor de terminal es sesiones confiables en servidores remotos.

Esto completa mi conversión de GNU Screen a Tmux. Nunca miraré hacia atrás.

¡Disfrutar!

Bruno Bronosky
fuente
2
También me había perdido el ':' ... gracias por esto.
rascalking
Recibí 2 votos negativos sobre esto recientemente sin comentarios que sugieran por qué. Eso es solo una cultura grosera y anti-FOSS.
Bruno Bronosky
1
¡La documentación no habla sobre los dos puntos en absoluto! Nice one
JonnyRaa
1
Usar la sintaxis de puntos es lo que me ayudó, window.panepor ejemplo, join-pane -s 1.0a mover el panel 0 en la ventana 1 a la ventana actual. Más detalles en maciej.lasyk.info/2014/Nov/19/tmux-join-pane
mbigras
A partir de tmux 2.1, :aparentemente ya no es necesario (por ejemplo, simplemente hazlo :join-pane -s 1). Tal vez eso fue un error en versiones anteriores
villapx
38

Creo que me gusta más lo que he estado usando para mover paneles a su propia ventana. yo suelo

break-pane -t :

Lo descubrí a través de la experimentación, pero parece funcionar muy bien. Puede vincularlo o asignarle un alias fácilmente, sin necesidad de secuencias de comandos.

Joshua K
fuente
2
+1. Tiendo a usar esto con mucha más frecuencia que join-pane.
Chris B
14

Si no desea escribir el identificador del panel en una solicitud, también puede usar

bind-key j "join-pane -s !"

que unirá el último panel / ventana activo a la ventana actual.

Bernhard T
fuente
1
¿Qué versión está utilizando? Me estoy poniendo unknown command: join-pane -s !con 1.6.
paradroid
Usar 2.0 aquí, pero solo poner la línea en la conf sin comillas parece funcionar bien. bind-key j join-pane -s !
bkzland
13

Después de leer las otras respuestas y examinar la página de manual de tmux, me decidí por los siguientes enlaces por ahora:

bind-key S choose-window 'join-pane -v -s "%%"'
bind-key V choose-window 'join-pane -h -s "%%"'

Esto le permitirá seleccionar de forma interactiva la ventana para unir y reflejar mis minúsculas s/ venlaces para crear nuevas divisiones verticales / horizontales. Si alguien sabe cómo seleccionar paneles individuales en lugar de ventanas, hágamelo saber.

toupeira
fuente
Esto es muy útil. Gracias. Lamentablemente, -vy -hno crean "divisiones" verticales y horizontales, respectivamente. Crean " paneles apilados " verticales y horizontales, respectivamente. (Es decir que los paneles apilados verticalmente tienen una división horizontal). Así que tienes que entrenar tu cerebro de esa manera. También -ves el valor predeterminado, así que lo dejaría fuera y solo lo pondría -hallí para que ~/.tmux.confactúe como una hoja de trucos para que lo vea.
Bruno Bronosky el
Me gusta esto mejor que las otras respuestas para "opuesto a break-pane". Habiendo liberado temporalmente un panel en su propia ventana, más tarde quiero enviarlo de regreso a una de las ventanas más antiguas y esto lo maneja con gracia.
Stabledog
13

Clave de enlace

Por defecto, Ctrl+ b, !sería romper el panel activo en una nueva ventana y cambiar a ella.

Donde Ctrl+ bes el prefijo predeterminado para .

Detalles

El tmuxcomando que ejecuta esta tecla es break-pane(alias:) breakpcomo se implementa cmd-break-pane.cy enlaza como predeterminado en key-bindings.c como se ve en la salida del comando list-keys(alias lsk:):

bind-key    -T prefix       !                 break-pane
muru
fuente
4

No tiene que cambiar sus combinaciones de teclas.

Mientras que el panel que desea mover tiene el foco, escriba Prefijo y :join-pane -t :1dónde 1está el número de la ventana de destino en la misma sesión. Puede moverlo a otra sesión anteponiendo su nombre como project:3. Para mí join-panetab-autocompletes de j.

Agregue un -ho -vcambie al comando para establecer la orientación de la nueva división creada en el destino, o simplemente vaya a ella y Prefijo + spacepara reorganizar.

Walf
fuente