En screen
, Solo puedo escribir C-a :number 0
para mover una ventana a la parte superior de la lista de ventanas y empujar todas las demás ventanas hacia abajo una. ¿Cuál es la secuencia de comandos equivalente para tmux
? Miré la página de manual, pero me parece confuso en este punto.
379
C-b
,.
le permite renumerar una ventana.swap-window -s number
yswap-window -t number
para cambiar la ventana actual, ver mi respuesta aqui .Respuestas:
los
swap-window
El comando es lo más cercano a lo que quieres."Prefijo:" (que es "Ctrl-B:" por defecto) lo lleva al indicador de comando tmux. Allí entras:
para permitir que la ventana número 3 y la ventana número 1 intercambien sus posiciones.
Para intercambiar la ventana actual con la ventana superior, haga:
En el caso improbable de no tener ventana en el índice 0, haga:
(Si el índice base es 0, como es por defecto).
Puede enlazar ese comando a una tecla (T para "arriba" por ejemplo) agregando lo siguiente a su
~/.tmux.conf
:fuente
move-window
solo funciona, si no hay otra ventana en el índice dado. Así que en la mayoría de los casos,move-window -t 0
no funcionará, ya que normalmente habrá otra ventana en esa posición ya.movew
.bind-key L swap-window -t -1
Para que sea la última ventana.swapw -s number
yswapw -t number
para cambiar la ventana actual, ver mi respuesta aqui .Agregando a la respuesta de Gareth, puedes usar los siguientes enlaces de teclas
Presionando Ctrl + Shift + Izquierda (moverá la ventana actual a la izquierda. Similarmente a la derecha. No es necesario usar el modificador (C-b).
fuente
-1
y+1
La sintaxis ayuda a resolver el problema de los índices ocupados. tmux cambiará las otras ventanas por usted y el evento se ajustará al final / comienzo automáticamente. Esta es la mejor respuesta.bind-key S-Left swap-window -t -1
, así que puedo hacer & lt; prefijo & gt; Mayús + flecha, ya que no me gusta estropear los enlaces de teclas para los programas.bind-key -n C-H swap-window -t -1
bind-key -n C-S-Left swap-window -t -1
sin embargo, funciona bien cuando se usa el prefijo como lo sugiere @MatthewMitchellEl tmux equivalente a
:number 42
es:move-window -t 42
.fuente
:move-window
es no equivalente a la pantalla:number
.:number
swaps si el destino existe,:move-window
falla en ese caso Tienes que elegir entre:move-window
y:swap-window
Puede implementar un equivalente a
screen
esnumber
comando utilizando un script de shell externo que elige entreswap-window
ymove-window
. Puedes enlazarlo a una clave de esa manera:~/.tmux.number.sh
:fuente
-F
Opción que no es aceptada por mi versión tmux.Renumero ventanas como esta:
Ctrl + segundo ,
.
,222
haría la corriente
tmux
Ventana (todos los paneles) número 222.Relacionado: cuando estoy barajando cosas, tiendo a querer hacer
Ctrl + segundo
:new-session -d -s "reading"
y desde allí también puedo usar Ctrl + segundo ,
.
,reading
para mover la ventana actual (todos los paneles a la vez) a la sesión de lectura. Puedes navegar entre sesiones con Ctrl + segundo ,s
la forma en que navegarías dentro de la sesión usando Ctrl + segundo ,w
.HTH
fuente
Uso de la ventana de intercambio para moverse a cualquier ID: [más cercano a la pantalla: número]
[m para mover - & gt; pulsa el prefijo -m y escribe dice 3. .para renumerar la ventana a 3]
fuente
Dado que la respuesta de Ashish Ariga no funciona en la versión 1.9a y en la siguiente. yo suelo
<
y>
para cambiar la ventana a izquierda y derecha, respectivamente, agregando la línea de abajo a.tmux.conf
.fuente
La solución más simple de
man
, es utilizar los enlaces por defecto:fuente
Para aquellos de ustedes que usan
byobu
como su envoltorio para tmux, puede intercambiar la ventana actual con la ventana anterior o siguiente con:La clave de enlace definida por
byobu
Para estas claves puede ser de interés:fuente
El enfoque que utilizo combina un poco de la respuesta de Ashish con las piezas; Tengo flechas de flecha izquierda y derecha asociadas a una pequeña y rápida llamada de shell que mueve la ventana una hacia la izquierda o hacia la derecha, a menos que sea la primera o la última ventana, respetuosamente. Hice esto porque, cuando emites un swap +1 en la última ventana (o swap -1 en la primera ventana), aún se intercambiará, en lugar de volver a dar la vuelta como se puede esperar:
Se convierte
En lugar de
Por lo tanto, los comandos que utilizo dejan de funcionar cuando la ventana ha llegado al borde de la lista:
Esto se puede combinar fácilmente con índice base y renumerar ventanas tener una lista de ventanas que comiencen en un número arbitrario y nunca tengan espacios vacíos.
Si estas usando índice base 1 al igual que yo y no crees que vayas a superar las 999 ventanas, puedes usar un pequeño truco para hacer que ruede correctamente, aunque los comandos se hinchan un poco:
Esto funciona moviendo temporalmente la última ventana al índice-0 no utilizado y luego llamando mover ventana -r para renumerarlos a partir de 1 nuevamente. Funciona de manera similar cuando se mueve la primera ventana al final; Al elegir un número enorme que nunca usará, garantiza que cuando mover ventana -r Dispara de nuevo todo estará numerado como cabría esperar. Si te estás preguntando acerca de refresh-client -S , eso es necesario porque a veces, mientras se reordena desde ventana de movimiento funcionará correctamente, la barra de estado no se actualizará hasta que se realicen más cambios. Al forzar una actualización de solo la barra de estado (-S), evita esto.
El único problema que puedo encontrar con este enfoque es que ventana de intercambio alterará implícitamente la última ventana utilizada a la que intercambió. Por lo tanto, si está en la ventana # 1, cambie a la ventana cuatro y muévala hacia atrás una, encontrará que la última ventana utilizada es la nueva # 4 (anteriormente # 3) en lugar de la # 1. No parece haber una manera de evitar esto.
fuente
control de dolor tmux proporciona
ctrl-b >
yctrl-b <
para mover la ventana enfocada hacia la derecha y hacia la izquierda, envolviéndola.fuente
puedes usar
base-index
para cambiar el número inicial de sus ventanas. si establecebase-index
a1
, entoncesmove-window -r
volverá a numerar todas las ventanas a partir de1
, liberando así0
para mover una ventana a su ranura:cuando termines, puedes reiniciar
base-index
a0
si quieres usarmove-window -r
despues sin mover tu ventana a0
fuente
Ambos
swap-window -s 5
yswap-window -t 5
Cambiar ventana actual con ventana 5, pero con semántica diferente.swap-window -s 5
swap-window -t 5
la
number
enswap-window -s number
y-t number
podría ser ambos absoluto , por ejemplo, 5, y relativo , por ejemplo, -1, +2.PD A continuación se muestra un extracto de la línea de estado de tmux que ilustra el efecto de
swap-window -s 5
reciente:
[0] 0:vim- 1:mpl 2:py2* 3:numpy 4:plot 5:mc
ahora despues
last-window
:[0] 0:vim* 1:mpl 2:py2- 3:numpy 4:plot 5:mc
después
swapw -s 5
:[0] 0:mc* 1:mpl 2:py2- 3:numpy 4:plot 5:vim
otro
swapw -s 5
:[0] 0:vim* 1:mpl 2:py2- 3:numpy 4:plot 5:mc
otro
last-window
:[0] 0:vim- 1:mpl 2:py2* 3:numpy 4:plot 5:mc
fuente
Desde la ventana de tmux, intente lo siguiente para cambiar la ventana 0 por 1:
$ tmux swap-window -d -s 0 -t 1
fuente
Creo que desea vincular una nueva combinación de teclas al comando 'elegir ventana'.
Sé que dijiste que ya habías leído la página del manual, pero deberías consultarla. necesita modificar su archivo ~ / .tmux.conf para agregar un comando de vinculación.
Específicamente, mira la página 4 de lo siguiente.
página del manual de tmux
fuente
choose-window
No parece mover la ventana actual a una nueva posición.choose-window
ya está obligado aC-B w
.Este es el método que utilizo. Aún no puede mover una ventana a un índice ocupado, pero puede mover una a un mayor (índice no utilizado) y reorganizar en el espacio donde estaba el índice anterior.
Supongamos que tiene 3 ventanas y desea agregar una cuarta pero en el lugar donde anteriormente estaba 3.
Antes de agregar una nueva ventana: Tmux prefijo entonces. se abrirá el comando de movimiento. Escriba 4 y el índice de 3 ahora se convertirá en 4, luego simplemente agregue otra ventana y estará en el índice 3 y su ventana anterior seguirá en el índice 4.
fuente
Primero, abra el comando tmux presione y suelte:
Y para cambiar la ventana real a la ventana derecha (en orden circular), simplemente haga lo siguiente:
Para cambiar la ventana real a la izquierda:
SHIFT
cuando presione}
o{
.fuente
Por lo que vale:
Hacké este script juntos para poder ordenar todas las ventanas en un "TUI". Enumera todas sus ventanas en un archivo temporal, lo abre con su editor predeterminado (asume que ha establecido $ EDITOR). Después de esto, puede reordenar las líneas y después de guardar y cerrar el archivo, las ventanas se reordenarán de acuerdo con esto. (Esto es similar a ordenar compromisos cuando se hace
git rebase -i
)Probablemente se podría mejorar mucho, en particular:
NOTA : Es posible que se mueva a otra ventana después de ejecutar el comando.
Un gif de ella en acción (github)
fuente
Ninguna de las respuestas aquí me ha satisfecho, así que escribí un guión que (similar a) imita al
screen
comportamiento de movimiento de la ventana paratmux
.Detecta si el número de la ventana de destino es menor que el número de ventana más pequeño o más grande que el número de ventana más grande, y si es así, desplaza todas las demás ventanas a la derecha o izquierda (respectivamente) y las vuelve a numerar desde 1-N de manera incremental. Esto se hace con la
move-window
mando.Si el número de la ventana es entre los números más pequeños / más grandes (es decir, presumiblemente, coinciden con un número de ventana existente), simplemente los intercambia con el
swap-window
mando.Aquí está el guión:
Luego, simplemente agregue este enlace simple a su
.tmux.conf
:Nota : Para imitar perfectamente
screen
comportamiento de cambio de ventana, creo que cuando mueves una ventana a una existente número de ventana, debe tomar el lugar de esa ventana y todas las demás ventanas se empujan hacia el Correcto . Sería bastante sencillo modificar este script para hacerlo.fuente