Crie um painel tmux de 80 (ou mais) colunas de largura

12

Estou tentando seguir a regra das 80 colunas ao escrever meu código, minha configuração atual do tmux é dividida horizontalmente 50/50. Eu gosto de ter o vim no painel esquerdo, e no painel direito tenho uma divisão 75/25, onde corro outras coisas.

No meu monitor lateral, 50% tem 76 colunas de largura, mas, no monitor do meu laptop, tem 123 colunas.

Gostaria de maximizar o setor imobiliário para outros comandos. Existe uma maneira de definir isso para exatamente 80 colunas (mais ou menos) quando inicio meu espaço de trabalho?

Atualmente, estou configurando meu espaço de trabalho com:

bind C-w source-file ~/dotfiles/scripts/tmux_work_layout

esse arquivo contém:

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
fonte
Você pode considerar usar um editor que preencha o parágrafo até a coluna especificada, 80 no seu caso. Verifique o emacs .
Luis
1
O vim 7.3+ possui uma colorcolumnconfiguração que adiciona uma coluna de segundo plano alternativo ao enésimo caractere. PS> Eu nunca vou virar para o lado sombrio;)
JKirchartz

Respostas:

5

É algo assim que você quer?

Adicionar ao arquivo e tornar executável por chmod +x filename. ligar por exemplo

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

Para executá-lo a partir do arquivo de origem:

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

Também é preciso levar em consideração, por exemplo, números de linhas no vim, talvez 85?


Edite talvez um pouco melhor (não muito desordem) (depois de 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
fonte
isso parece funcionar perfeitamente; existe uma maneira de executá-lo automaticamente quando carrego meu espaço de trabalho? (também eu atualizei a minha pergunta com um pouco mais info)
JKirchartz
@JKirchartz: Atualizado com o comando source. (É bom ver pessoas usando ferramentas decentes entre;.)) Usaram screene apenas recentemente começaram a tentar me forçar a fazê-lo tmux.
Runium
Sim, eu estava tentando descobrir divisões de vim e não estava muito feliz com o fluxo de trabalho, fiz check-out screenpor um dia antes de descobrir tmux, eu adoro isso. Configure-o para ser parecido com o vim e agora é fácil.
JKirchartz
acabei de perceber um bug, você não está definindo o painel $ em nenhum lugar, substituindo-o por 0 funcionou perfeitamente, obrigado!
JKirchartz
@JKirchartz: Ah, obrigado. Copiei-o de algum código onde $paneestava o argumento opcional 2 e onde tentei determinar onde estava o painel (esquerda / centro / direita) e usei "R" ou "L" de acordo, mas provou ser difícil de detectar. Corrigido.
Runium
8

Achei o código da resposta aceita útil, mas estou usando o tmux 1.8 e isso parece ser um recurso incorporado. Nas páginas de manual do tmux, em janela 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.Então, simplesmente usar -l insead of -p deve ter o efeito você está procurando. ex:

split-window -h -l 80

Uma solução semelhante para resize-paneé descrita aqui .

Nathan Buesgens
fonte
0

Uma maneira fácil de fazer isso é usar o layout vertical principal com Cb M-4 ou Cb: selectl vertical principal. Ele foi projetado para o emacs, de modo que o painel esquerdo tenha 81 colunas, você precisará alterar a opção de largura do painel principal para torná-lo 80.

user38548
fonte