Zrób panel tmux o szerokości 80 (lub więcej) kolumn

12

Staram się przestrzegać reguły 80 kolumn podczas pisania kodu, moja obecna konfiguracja tmux jest podzielona w poziomie 50/50. Lubię mieć vima w okienku po lewej stronie, aw okienku po prawej mam podział 75/25, gdzie uruchamiam inne rzeczy.

Na moim bocznym monitorze 50% ma 76 kolumn, ale na wyświetlaczu mojego laptopa ma 123 kolumny.

Chciałbym zmaksymalizować nieruchomości dla innych poleceń. Czy istnieje sposób, aby ustawić dokładnie 80 kolumn (lub więcej) po uruchomieniu mojego obszaru roboczego?

Obecnie konfiguruję mój obszar roboczy za pomocą:

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

ten plik zawiera:

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
źródło
Możesz rozważyć użycie edytora, który wypełnia akapit aż do wskazanej kolumny, w twoim przypadku 80. Sprawdź emacsa .
Luis
1
vim 7.3+ ma colorcolumnustawienie, które dodaje kolumnę alternatywnego tła do n-tego znaku. PS> Nigdy nie
przejdę

Odpowiedzi:

5

Czy chcesz czegoś takiego?

Dodaj do pliku i wykonaj przez chmod +x filename. zadzwoń np

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

Aby uruchomić go z pliku źródłowego:

if-shell /path/to/script/sizetmux 80

Kod:

#!/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

Trzeba też wziąć pod uwagę np. Numery linii w vimie, więc może 85?


Edytuj może nieco ładniejszy (nie za dużo bałaganu) (po 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
źródło
wydaje się, że działa to idealnie, czy istnieje sposób, aby uruchomić go automatycznie po załadowaniu obszaru roboczego? (także zaktualizowałem moje pytanie o trochę więcej informacji)
JKirchartz
@JKirchartz: Zaktualizowano przy pomocy polecenia source. (Miło widzieć ludzi używających przyzwoitych narzędzi btw.;)) Używam screeni dopiero niedawno zacząłem się do tego zmuszać tmux.
Runium
Tak, próbowałem rozgryźć podziały vimów i nie byłem zadowolony z przepływu pracy, sprawdziłem screento na dzień przed odkryciem tmux, uwielbiam to. Skonfiguruj go tak, aby był podobny do vima, a teraz będzie bardzo prosty.
JKirchartz
właśnie zauważyłem błąd, nigdzie nie definiujesz okienka $, zastąpienie go 0 działało idealnie, dzięki!
JKirchartz
@JKirchartz: Ach, dzięki. Skopiowałem go z jakiegoś kodu, w którym $panebył opcjonalny argument 2 i gdzie próbowałem ustalić, gdzie jest panel (lewy / środkowy / prawy) i odpowiednio użyć „R” lub „L”, ale okazało się to trudne do wykrycia. Poprawione
Runium
8

Uznałem, że kod akceptowanej odpowiedzi jest przydatny, ale używam tmux 1.8 i wygląda na to, że jest to wbudowana funkcja. Ze stron podręcznika tmux pod podzielonym oknem: 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.Po prostu użycie -l insead z -p powinno dać efekt szukasz. dawny:

split-window -h -l 80

Podobne rozwiązanie resize-paneopisano tutaj .

Nathan Buesgens
źródło
0

Łatwym sposobem na to jest użycie układu główny-pionowy z Cb M-4 lub Cb: selectl główny-pionowy. Jest przeznaczony dla emacs, więc lewy panel ma 81 kolumn, musisz zmienić opcję szerokości głównego panelu, aby uzyskać 80.

użytkownik38548
źródło