En GNU Screen, puedo cambiar a cualquier número de ventana dentro de una división determinada. Por ejemplo:
- Ingrese
screen
para 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
tmux
para 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-pane
el comando tmux. De man 1 tmux
:
swap-pane [-dDU] [-s src-pane] [-t dst-pane]
(alias:swapp
)Intercambia dos paneles. […]
-d
indica a tmux que no cambie el panel activo.Si
-s
se omite y hay un panel marcado (verselect-pane -m
), se utiliza el panel marcado en lugar del panel actual.
Es aún mejor: si -s
y -t
se 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 swapp
no 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 swapp
efectivamente no hará nada. En tal caso, tmux swapp && exit
simplemente 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 dividirdst-pane
y crear un nuevo panel, divídalo y muévasesrc-pane
al espacio. […]Si
-s
se 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 ":
- Marque el panel que desea mover.
Divida el panel que desea dividir:
- ya sea con
tmux joinp -v
invocado 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).
- ya sea con
El método with prefix :se puede utilizar para invocar swapp
cualquier otro comando tmux.
A continuación hay algunas notas sobre la manipulación de paneles desde el exterior de tmux. Los ejemplos usan tmux swapp
pero puedes invocar tmux joinp
de manera similar.
swap-pane
te permite intercambiarcualquierdos paneles dentro de un servidor tmux. Puedes correr tmux swapp
incluso 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.pane
parte, no estoy seguro del session
número). El primer panel 0:0.0
después de intercambiar 0:1.1
se 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 %0
en 0:0.0
y el nuevo estaba %2
en 0:1.1
entonces, ahora están %0
en 0:1.1
y %2
en 0:0.0
respectivamente. 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 ( -L
opción) o nombres de socket ( -S
). El nombre predeterminado es default
. Si invoca tmux
sin estas opciones desde tmux, encontrará el servidor correcto ( TMUX
creo que a través de la variable de entorno). Si invoca tmux
sin 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.