Estoy tratando de seguir la regla de las 80 columnas al escribir mi código, mi configuración actual de tmux está dividida 50/50 horizontalmente. Me gusta tener vim en el panel izquierdo y en el panel derecho tengo una división 75/25 donde ejecuto otras cosas.
En mi monitor lateral, el 50% tiene 76 columnas de ancho, pero en la pantalla de mi computadora portátil tiene 123 columnas de ancho.
Me gustaría maximizar el espacio para otros comandos. ¿Hay alguna manera de configurar esto en exactamente 80 columnas (más o menos) cuando inicio mi espacio de trabajo?
Actualmente estoy configurando mi espacio de trabajo con:
bind C-w source-file ~/dotfiles/scripts/tmux_work_layout
ese archivo contiene:
selectp -t 0 # Select pane 0
splitw -h -p 50 # Split pane 0 vertically by 50%
selectp -t 1 # Select pane 1
splitw -v -p 25 # Split pane 1 horizontally by 25%
selectp -t 0 # Select pane 0
Respuesta1
Encontré útil el código para la respuesta aceptada, pero estoy usando tmux 1.8 y esto parece ser una característica incorporada. Desde las páginas man de tmux en la ventana dividida: The -l and -p options specify the size of the new pane in lines (for vertical split) or in cells (for horizontal split), or as a percentage, respectively.
Entonces, simplemente usar -l en lugar de -p debería tener el efecto Estás buscando. ex:
split-window -h -l 80
resize-pane
Se describe una solución similar paraaquí.
Respuesta2
¿Es algo como esto lo que quieres?
Agregar al archivo y convertirlo en ejecutable mediante chmod +x filename
. llamar por ej.
./sizetmux # Default hardcoded size
./sizetmux 85 # Specify width
Para ejecutarlo desde el archivo fuente:
if-shell /path/to/script/sizetmux 80
Código:
#!/bin/bash
# Wanted pane width 0 - default 80, or pass argument 1 as wanted width
pw0=80
[[ "$1" =~ ^[0-9]+$ ]] && pw0="$1"
# This could be done nicer, but, anyhow: getting current width of pane 0
pw0_cur_w=$(tmux list-panes | awk -F"[ x:\\\[\\\]]+" '/^0:/{print $2}')
# Resize according to current width
if [[ "$pw0_cur_w" -eq "$pw0" ]]; then
echo "OK $pw0"
elif [[ "$pw0_cur_w" -gt "$pw0" ]]; then
((w = pw0_cur_w - pw0))
echo "$w less"
tmux resize-pane -L -t 0 "$w"
elif [[ "$pw0_cur_w" -lt "$pw0" ]]; then
((w = pw0 - pw0_cur_w))
echo "$w more"
tmux resize-pane -R -t 0 "$w"
fi
También hay que tener en cuenta, por ejemplo, los números de línea en vim, entonces ¿quizás 85?
Edite quizás un poco mejor (no tanto desorden) (despuéspw0_cur_w=$(tm ...
((w = pw0_cur_w - pw0))
if [[ "$w" -ge 0 ]]; then
dir="L"
echo "$w less"
else
dir="R"
((w *= -1))
echo "$w more"
fi
[[ "$w" -gt "0" ]] && tmux resize-pane -"$dir" -t 0 "$w"
Respuesta3
Una manera fácil de hacer esto es usar el diseño vertical principal con Cb M-4 o Cb: selectl main-vertical. Está diseñado para emacs, por lo que el panel izquierdo tiene 81 columnas; deberá cambiar la opción de ancho del panel principal para que sea 80.
Respuesta4
Las cosas han cambiado desde que se publicó la pregunta y la última respuesta. tmux tiene ganchos que se pueden usar para mantener fijo el ancho del panel principal.
por ejemplo, uso el siguiente alias:
alias work-bftp="tmux attach -t work-bftp || tmux new -s work-bftp -d 'bash' \; set -g default-command bash \; split-window -h \; set-option -t work-bftp main-pane-width 80 \; selectl main-vertical \; set-hook -t work-bftp window-layout-changed 'selectl main-vertical;' \; attach;"
para crear una main-vertical
ventana basada en diseño, donde el panel principal se usa para el uso de vim de 80 columnas de ancho en la primera ventana. Esto utiliza window-layout-changed
el evento para volver a dibujar la ventana con el tamaño deseado.
Lo intenté y funcionó durante un tiempo, client-resized
también con el evento, pero un día dejó de funcionar para las operaciones de maximización de la ventana del terminador/emulador.
Sin embargo, un problema con este enfoque es que el prefijo-z ya no funciona para la primera ventana.