shell - mac - tmux para ubuntu
¿Cómo configurar tmux para que se inicie con las ventanas especificadas abiertas? (17)
Acabo de intentar usar todas las ideas en esta página y no me gustó ninguna de ellas. Solo quería una solución que iniciara tmux con un conjunto específico de ventanas cuando se abrió mi terminal. También quería que fuera idempotente, es decir, abrir una nueva ventana de terminal se hace cargo de la sesión tmux de la anterior.
Las soluciones anteriores a menudo tienden a abrir varias sesiones de tmux y solo quiero una. Primero, agregué esto a mi ~/.bash_profile
:
tmux start-server
if [[ -z "$TMUX" ]]
then
exec tmux attach -d -t default
fi
Luego agregué lo siguiente a mi ~/.tmux.conf
:
new -s default -n emacs /usr/local/bin/emacs
neww -n shell /usr/local/bin/bash
neww -n shell /usr/local/bin/bash
selectw -t 1
Ahora, cada vez que inicio una terminal o inicio tmux o lo que sea, vuelvo a unir la configuración deseada existente (la sesión se denomina por default
), o creo una nueva sesión con esa configuración.
¿Cómo configurar tmux para que se inicie con las ventanas especificadas abiertas?
Debería especificarlo en su archivo de configuración tmux ( ~/.tmux.conf
), por ejemplo:
new mocp
neww mutt
new -d
neww
neww
(abre una sesión con 2 ventanas con mocp iniciada en primer lugar y mutt en segundo, y otra sesión separada con 3 ventanas vacías).
Desde mi script "get.all", que invoco cada mañana para ejecutar una serie de trabajos "get.XXX" subsiguientes para actualizar el software del que estoy realizando un seguimiento. Algunos de ellos son automáticos. Otros requieren una mayor interacción una vez que finaliza el proceso de obtención (como pedir compilar emacs)
#!/bin/sh
tmux att -t get ||
tmux /
new -s get -n capp /; /
send-keys ''get.capp'' C-m /; /
neww -n emacs /; /
send-keys ''get.emacs'' C-m /; /
neww -n git /; /
send-keys ''get.git'' C-m /; /
neww -n mini /; /
send-keys ''get.mini'' C-m /; /
neww -n port /; /
send-keys ''get.port'' C-m /; /
neww -n rakudo /; /
send-keys ''get.rakudo'' C-m /; /
neww -n neil /; /
send-keys ''get.neil && get.neil2 && exit'' C-m /; /
neww -n red /; /
send-keys ''get.red && exit'' C-m /; /
neww -n cpan /; /
send-keys ''get.cpan && exit'' C-m /; /
selectw -t emacs
El complemento tmux-continuum guardará automáticamente su sesión de tmux y la cargará la próxima vez que se inicie tmux, debería ser más fácil de configurar que algunas de las soluciones de script personalizadas aquí.
caracteristicas:
- ahorro continuo del entorno tmux
- inicio tmux automático cuando la computadora / servidor está encendido
- Restauración automática cuando se inicia tmux
Para guardar su sesión a pedido, puede usar el complemento tmux-resurrect . tmux-resurrect también se requiere para ejecutar tmux-continuum
tmux-resurrect guarda todos los pequeños detalles de su entorno tmux para que pueda restaurarse completamente después de reiniciar el sistema (o cuando lo desee). No se requiere ninguna configuración. Deberías sentir que nunca abandonaste tmux.
Estaba tratando de crear una cuadrícula compleja de paneles y tuve que lidiar con cambiar y dividir los paneles una y otra vez. Aquí están mis aprendizajes:
tmux new-session /;
Te hace comenzar con una nueva sesión. Para dividirlo horizontal o vertical, use split-window -h
o -v
posteriormente, así:
tmux new-session /; split-window -v /; split-window -h /;
Crea 3 paneles, así:
------------
| |
|----------|
| | |
------------
Para ejecutar comandos en esos paneles, simplemente agréguelos con el send-keys ''my-command''
y Cm
que lo ejecuta:
tmux new-session /; /
send-keys ''tail -f /var/log/monitor.log'' C-m /; /
split-window -v /; /
split-window -h /; /
send-keys ''top'' C-m /;
Y la sesión resultante debería verse así.
------------
| tail |
|----------|
| | top |
------------
Ahora intenté subdividir de nuevo el panel inferior izquierdo, así que cambiar de nuevo usando el last-pane
, o en ventanas más complejas, con el select-pane -t 1
donde 1
es el número del panel en el orden creado comenzando con 0
.
tmux new-session /; /
send-keys ''tail -f /var/log/monitor.log'' C-m /; /
split-window -v /; /
split-window -h /; /
send-keys ''top'' C-m /; /
select-pane -t 1 /; /
split-window -v /; /
send-keys ''weechat'' C-m /;
Hace eso. Básicamente, saber todo lo que necesita con split-window
y select-pane
es todo lo que necesita. También es útil pasar con -p 75
un porcentaje del tamaño del panel creado por split-window
para tener más control sobre el tamaño de los paneles.
tmux new-session /; /
send-keys ''tail -f /var/log/monitor.log'' C-m /; /
split-window -v -p 75 /; /
split-window -h -p 30 /; /
send-keys ''top'' C-m /; /
select-pane -t 1 /; /
split-window -v /; /
send-keys ''weechat'' C-m /;
Lo que resulta en una sesión parecida a eso
------------------
| tail |
|----------------|
| | top |
|----------| |
| weechat | |
------------------
Espero que ayude a los entusiastas de tmux
en el futuro.
Esto funciona para mi Creación de 5 ventanas con los nombres dados y selección automática a la ventana de home
.
new -n home
neww -n emacs
neww -n puppet
neww -n haskell
neww -n ruby
selectw -t 1
Hay un plugin tmux para esto.
Echa un vistazo a tmux-resurrect
Restaurar el entorno tmux después de reiniciar el sistema.
Tmux es genial, excepto cuando tienes que reiniciar la computadora. Pierde todos los programas en ejecución, directorios de trabajo, diseños de paneles, etc. Existen herramientas de administración útiles, pero requieren una configuración inicial y actualizaciones continuas a medida que su flujo de trabajo evoluciona o comienza nuevos proyectos.
tmux-resurrect guarda todos los pequeños detalles de su entorno tmux para que pueda restaurarse completamente después de reiniciar el sistema (o cuando lo desee). No se requiere ninguna configuración. Deberías sentir que nunca abandonaste tmux.
caracteristicas:
- ahorro continuo del entorno tmux
- inicio tmux automático cuando la computadora / servidor está encendido
- Restauración automática cuando se inicia tmux
He creado este script . No necesita tmuxinator, ruby u otros. Es solo un script bash, configurable:
Un archivo llamado config debería contener algo como esto:
combo=()
combo+=(''logs'' ''cd /var/log; clear; pwd'')
combo+=(''home'' ''cd ~; clear; pwd'')
y el código bash debe ser:
#!/bin/bash
if [ -r config ]; then
echo ""
echo "Loading custom file"
. config
else
. config.dist
fi
tmux start-server
window=0
windownumber=-1
for i in "${combo[@]}"; do
if [ $((window%2)) == 0 ]; then
name=${i}
((windownumber++))
else
command=${i}
fi
if [ ${combo[0]} == "${i}" ]; then
tmux new-session -d -s StarTmux -n "${name}"
else
if [ $((window%2)) == 0 ]; then
tmux new-window -tStarTmux:$windownumber -n "${name}"
fi
fi
if [ $((window%2)) == 1 ]; then
tmux send-keys -tStarTmux:$windownumber "${command}" C-m
fi
((window++))
done
tmux select-window -tStarTmux:0
tmux attach-session -d -tStarTmux
Primero tuve el enfoque de @jasonwryan pero si tiene más de 2 configuraciones, puede ser confuso.
Así que creé una función de alias:
tmx () {
tmux "$2" source-file "$HOME/.tmux/$1.conf";
}
En ~/.tmux/
tengo múltiples sesiones para muchos usos. Por ejemplo, trabajo para diferentes empresas que tienen entornos de desarrollo. Así que con la función de alias anterior puedo simplemente llamar: tmx company1
y cargar la configuración que necesito.
Actualización: el propósito de "$ 2" después del comando tmux
es que pueda pasar argumentos tmux adicionales.
Puede escribir un script de shell pequeño que inicie tmux con los programas necesarios. Tengo lo siguiente en un script de shell que llamo dev-tmux. Un entorno de desarrollo:
#!/bin/sh
tmux new-session -d ''vim''
tmux split-window -v ''ipython''
tmux split-window -h
tmux new-window ''mutt''
tmux -2 attach-session -d
Así que cada vez que quiero lanzar mi entorno de desarrollo favorito solo puedo hacer
$ dev-tmux
Puede obtener diferentes sesiones de su .tmux.conf
así:
# initialize sessions
bind S source-file ~/.tmux/session1
bind s source-file ~/.tmux/session2
Y luego formatee las sesiones como lo requiera:
#session1
new -s SessionName -n WindowName Command
neww -n foo/bar foo
splitw -v -p 50 -t 0 bar
selectw -t 1
selectp -t 0
Esto abriría 2 ventanas, la segunda de las cuales se llamaría foo / bar y se dividiría verticalmente por la mitad (50%) con foo corriendo por encima de la barra. El foco estaría en la ventana 2 (foo / bar), panel superior (foo).
Luego puede iniciar su sesión tmux preferida (en este caso, sesión1) con Prefix Shift s
Si solo desea dividir la pantalla en 2 paneles (digamos horizontalmente), puede ejecutar este comando (no se requieren tmux o shell scripts):
tmux new-session /; split-window -h /;
Tu pantalla se verá así:
[ks@localhost ~]$ │[ks@localhost ~]$
│
│
│
│
│
│
│
│
│
│
│
[10] 0:ks@localhost:~* "localhost.localdomain" 19:51 31-янв-16
Use tmuxinator : le permite tener varias sesiones configuradas y puede elegir cuál iniciar en cualquier momento. Puede iniciar comandos en ventanas o paneles particulares y asignar títulos a las ventanas. Aquí hay un ejemplo de uso con el desarrollo de aplicaciones Django .
Archivo de configuración de muestra:
# ~/.tmuxinator/project_name.yml
# you can make as many tabs as you wish...
project_name: Tmuxinator
project_root: ~/code/rails_project
socket_name: foo # Not needed. Remove to use default socket
rvm: 1.9.2@rails_project
pre: sudo /etc/rc.d/mysqld start
tabs:
- editor:
layout: main-vertical
panes:
- vim
- #empty, will just run plain bash
- top
- shell: git pull
- database: rails db
- server: rails s
- logs: tail -f logs/development.log
- console: rails c
- capistrano:
- server: ssh me@myhost
Consulte el archivo README en el enlace anterior para obtener una explicación completa.
Y así es como lo hago:
#!/bin/bash
function has-session {
tmux has-session -t name_of_my_session 2>/dev/null
}
if has-session ; then
echo "Session already exists"
else
cd /path/to/my/project
tmux new-session -d -s name_of_my_session ''vim''
tmux split-window -h -p 40 start_web_server
tmux split-window -v
tmux attach-session -d -t name_of_my_session
fi
Tengo un archivo para cada uno de mis proyectos. También puedes agruparlos para tener algunos para trabajar algunos para proyectos de hobby.
También puede moverlo a la carpeta ~/bin
, agregarlo a PATH
y darle el nombre tmux_my_awesome_project
. Entonces podrás correrlo desde cada lugar.
echar un vistazo @ https://github.com/remiprev/teamocil
puedes especificar tu estructura usando YAML
windows:
- name: sample-window
splits:
- cmd: vim
- cmd:
- ipython
width: 50
- cmd:
height: 25
tmuxp admite la configuración de sesión JSON o YAML y una API de python. Un simple archivo de configuración tmuxp para crear una nueva sesión en la sintaxis YAML es:
session_name: 2-pane-vertical
windows:
- window_name: my test window
panes:
- pwd
- pwd
:~$ tmux new-session "tmux source-file ~/session1"
Sesión 1
neww
split-window -v ''ipython''
split-window -h
new-window ''mutt''
crear un alias en .bashrc
:~$ echo `alias tmux_s1=''tmux new-session "tmux source-file ~/session1"''` >>~/.bashrc
:~$ . ~/.bashrc
:~$ tmux_s1