Cargue el terminal desde otra ventana en el panel dividido actual en tmux

Cargue el terminal desde otra ventana en el panel dividido actual en tmux

En GNU Screen, puedo cambiar a cualquier número de ventana dentro de una división determinada. Por ejemplo:

  • Ingrese screenpara iniciarlo.
  • Presione Ctrl+ a cpara crear una nueva ventana. Ahora hay dos ventanas: ventana 0 y ventana 1. La ventana actual es ahora la ventana 1.
  • Presione Ctrl+ a Shift+ spara crear una nueva división.
  • Presione Ctrl+ a Tabpara ir a la nueva división.
  • Presione Ctrl+ 0para cargar la ventana 0 en esta nueva división.

¿Cómo podemos hacer algo similar en Tmux? Esto es lo que tengo hasta ahora:

  • Ingrese tmuxpara iniciarlo.
  • Presione Ctrl+ b cpara crear una nueva ventana. Ahora hay dos ventanas: ventana 0 y ventana 1. La ventana actual es la ventana 1.
  • Presione Ctrl+ b "para crear un nuevo panel dividido. El panel actual es ahora el nuevo panel dividido.
  • ¿Cómo puedo cargar ahora el shell en la ventana 0 en este nuevo panel dividido?

¿Hay alguna forma de simular este comportamiento de la pantalla en tmux?

Respuesta1

Tmux no admite mostrar el mismo panel en dos ventanas diferentes ni admite mostrar el mismo panel dos veces en la misma ventana. Puede vincular una ventana completa a una sesión sin desvincularla de su sesión original. O puede colocar un panel en otra ventana, pero esto eliminará el panel de su ventana original.

En su ejemplo, ya ha creado un panel que ocupa el lugar para el panel deseado. En este caso, puede intercambiar los dos paneles con swap-paneel comando tmux. De man 1 tmux:

swap-pane [-dDU] [-s src-pane] [-t dst-pane]
(alias: swapp)

Intercambia dos paneles. […] -dindica a tmux que no cambie el panel activo.

Si -sse omite y hay un panel marcado (ver select-pane -m), se utiliza el panel marcado en lugar del panel actual.

Es aún mejor: si -sy -tse omiten y hay un panel marcado, el panel marcado y el panel actual se intercambian. En cualquier momento dado puede haber como máximo un panel marcado dentro de todo el servidor tmux.

¿Cómo puedo cargar ahora el shell en la ventana 0 en este nuevo panel dividido?

Navegue hasta la ventana 0 y marque el panel que desea mover (en su ejemplo, es el único panel allí). Lo haces con RMB (si se admite el mouse) o prefix m(donde el valor predeterminado prefixes Ctrl+ b). Vuelva al nuevo panel e invoque:

tmux swapp

El shell donde invocas tmux swappno se destruye automáticamente, ahora está en la ventana 0 donde solía estar el panel marcado. En su ejemplo, parece que no necesita este shell en sí, solo necesita el nuevo panel; Si es así, considérelo tmux swapp && exit. Tenga en cuenta que si no hay ningún panel marcado (o si el actual está marcado), tmux swappefectivamente no hará nada. En tal caso, tmux swapp && exitsimplemente saldrá del shell.

Alternativamente,en cambioEn lugar de crear un nuevo panel dividido, puede mover el panel deseado a la ventana actual en un solo paso.

join-pane [-bdhv] [-l size | -p percentage] [-s src-pane] [-t dst-pane]
(alias: joinp)

Me gusta split-window, pero en lugar de dividir dst-paney crear un nuevo panel, divídalo y muévase src-paneal espacio. […]

Si -sse omite y hay un panel marcado (consulte select-pane -m), se utiliza el panel marcado en lugar del panel actual.

Entonces en lugar de prefix ":

  1. Marque el panel que desea mover.
  2. Divida el panel que desea dividir:

    • ya sea con tmux joinp -vinvocado en el shell allí;
    • o con prefix : joinp -v Enter; en particular, esto es útil cuando no hay un shell inactivo en el panel que desea dividir (pero no olvide actualizar primero el panel).

El método with prefix :se puede utilizar para invocar swappcualquier otro comando tmux.

A continuación hay algunas notas sobre la manipulación de paneles desde el exterior de tmux. Los ejemplos usan tmux swapppero puedes invocar tmux joinpde manera similar.


swap-panete permite intercambiarcualquierdos paneles dentro de un servidor tmux. Puedes correr tmux swappincluso desde elafuerade tmux, sin marcar ni cambiar paneles manualmente, si sabe cómo abordar los dos paneles que desea intercambiar. Puede ser:

tmux swapp -s 0:1.1 -t 0:0.0

El formato es session:window.pane, ver el manual donde lo explica target-pane. Tenga en cuenta que estos números básicos son "relativos" (al menos la :window.paneparte, no estoy seguro del sessionnúmero). El primer panel 0:0.0después de intercambiar 0:1.1se convierte en 0:1.1. Por otro lado, las sesiones tmux, las ventanas y los paneles tienen susúnicoidentificadores (con el prefijo $, @y %respectivamente). En su caso el comando puede ser como:

tmux swapp -s %2 -t %0

Pero tenga en cuenta que si el panel antiguo estaba realmente %0en 0:0.0y el nuevo estaba %2en 0:1.1entonces, ahora están %0en 0:1.1y %2en 0:0.0respectivamente. El identificador único de cada panel está "adjunto" al contenido (proceso) del panel y "viaja" con él. Los identificadores de paneles sin prefijo dependen del número total de paneles y de su ubicación dentro de la ventana.

Puede nombrar sesiones ( rename-session) y ventanas ( rename-window). Esto facilita la identificación de paneles session:window.pane.


Puede ejecutar más de un servidor tmux. Los servidores se identifican con sus rutas de socket ( -Lopción) o nombres de socket ( -S). El nombre predeterminado es default. Si invoca tmuxsin estas opciones desde tmux, encontrará el servidor correcto ( TMUXcreo que a través de la variable de entorno). Si invoca tmuxsin estas opciones desde fuera de tmux, será como tmux -S default. Es posible que desee intercambiar dos paneles que pertenecen a un servidor tmux no predeterminado, por ejemplo:

tmux -S other swapp -s 0:1.1 -t 0:0.0

Tmux no admite el intercambio de paneles entre servidores. El objetivo de tener dos servidores es que están separados. Si alguna vez necesita intercambiar paneles entre dos entidades semiseparadas de tmux, estas entidades deben ser sesiones dentro de un único servidor tmux. Puede intercambiar paneles entre diferentes sesiones.

Si realmente necesita "secuestrar" un proceso que se ejecuta en otro servidor tmux, utilicereptyr. La herramienta es totalmente independiente de tmux.

información relacionada