Haga un panel tmux de 80 (más o menos) columnas de ancho

12

Estoy tratando de seguir la regla de 80 columnas al escribir mi código, mi configuración actual de tmux se divide 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 real para otros comandos. ¿Hay alguna forma de establecer 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
JKirchartz
fuente
Puede considerar usar un editor que llene el párrafo hasta la columna que especifique, 80 en su caso. Revisa emacs .
Luis
1
vim 7.3+ tiene una colorcolumnconfiguración que agrega una columna de un fondo alternativo en el enésimo carácter. PD> Nunca volveré al lado oscuro;)
JKirchartz

Respuestas:

5

¿Es algo como esto que quieres?

Agregar al archivo y hacer ejecutable por chmod +x filename. llamar por ej.

./sizetmux       # Default hardcoded size
./sizetmux 85    # Specify width

Para ejecutarlo desde un archivo de origen:

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, números de línea en vim, ¿entonces quizás 85?


Editar quizás un poco mejor (no tanto desorden) (después pw0_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"

Runium
fuente
esto parece funcionar perfectamente, ¿hay alguna forma de ejecutarlo automáticamente cuando cargo mi espacio de trabajo? (también he actualizado mi pregunta con un poco más de información)
JKirchartz
@JKirchartz: actualizado con el comando de origen. (Es bueno ver a la gente usando herramientas decentes por cierto;)) He estado usando screeny solo recientemente he comenzado a tratar de forzarme a hacerlo tmux.
Runium
Sí, estaba tratando de descubrir divisiones vim, y no estaba muy contento con el flujo de trabajo, lo comprobé screenun día antes de encontrarlo tmux, me encanta. Configúrelo para que parezca vim y ahora es muy fácil.
JKirchartz
acabo de notar un error, no estás definiendo $ pane en ninguna parte, reemplazando eso con 0 funcionó perfectamente, ¡gracias!
JKirchartz
@JKirchartz: Ah, gracias. Lo copié de algún código donde $paneestaba el argumento opcional 2 y donde intenté determinar dónde estaba el panel (izquierda / centro / derecha) y usé "R" o "L" en consecuencia, pero resultó ser difícil de detectar. Corregido
Runium
8

Encontré útil el código para la respuesta aceptada, pero estoy usando tmux 1.8 y parece ser una característica incorporada. De las páginas de manual 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 usando -l insead de -p debería tener el efecto Estás buscando. ex:

split-window -h -l 80

Aquíresize-pane se describe una solución similar para .

Nathan Buesgens
fuente
0

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.

usuario38548
fuente