Stellen Sie ein tmux-Fenster mit einer Breite von 80 (oder mehr) Spalten auf

12

Ich versuche, die 80-Spalten-Regel zu befolgen, wenn ich meinen Code schreibe. Mein aktuelles tmux-Setup ist horizontal 50/50 aufgeteilt. Ich mag es, vim im linken Bereich zu haben, und im rechten Bereich habe ich einen 75/25-Split, in dem ich andere Dinge laufen lasse.

Auf meinem Seitenmonitor sind 50% 76 Spalten breit, auf dem Display meines Laptops sind es 123 Spalten.

Ich möchte den Platz für andere Befehle maximieren. Gibt es eine Möglichkeit, diesen Wert auf ungefähr 80 Spalten festzulegen, wenn ich meinen Arbeitsbereich starte?

Ich richte gerade meinen Arbeitsbereich ein mit:

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

Diese Datei enthält:

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
quelle
Sie können einen Editor verwenden, der den Absatz bis zu der von Ihnen angegebenen Spalte ausfüllt (in Ihrem Fall 80). Überprüfen Sie den Emacs .
Luis
1
vim 7.3+ hat eine colorcolumnEinstellung, die eine Spalte mit einem alternativen Hintergrund am n- ten Zeichen hinzufügt. PS> Ich werde mich niemals der dunklen Seite
zuwenden

Antworten:

5

Ist es so etwas, was du willst?

Zur Datei hinzufügen und ausführbar machen durch chmod +x filename. Rufen Sie an von zB

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

So führen Sie es aus einer Quelldatei aus:

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

Code:

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

Man muss also vielleicht 85 auch zB Zeilennummern in vim berücksichtigen?


Bearbeiten Sie vielleicht ein bisschen schöner (nicht so viel Unordnung) (nach 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
quelle
Dies scheint perfekt zu funktionieren. Gibt es eine Möglichkeit, es automatisch auszuführen, wenn ich meinen Arbeitsbereich lade? (Ich habe auch meine Frage mit ein wenig mehr Informationen aktualisiert)
JKirchartz
@JKirchartz: Aktualisiert mit dem Befehl source. (Schön zu sehen, dass Leute anständige Tools verwenden, oder so;)) Ich benutze screenund habe erst vor kurzem angefangen, mich dazu zu zwingen tmux.
Runium
Ja, ich war , um herauszufinden , vim Spagat versucht, und ich war nicht sehr zufrieden mit dem Workflow ausgecheckt screenfür einen Tag vor der Feststellung tmux, ich liebe es. Stellen Sie es so ein, dass es wie ein Vim aussieht und jetzt ist es ein Kinderspiel.
JKirchartz
Ich habe gerade einen Fehler bemerkt, du definierst nirgendwo $ pane und das Ersetzen durch 0 hat perfekt funktioniert, danke!
JKirchartz
@JKirchartz: Ah, danke. Ich habe es aus einem Code kopiert, in dem $panedas optionale Argument 2 war und in dem ich versucht habe zu bestimmen, wo sich das Fenster befindet (links / Mitte / rechts), und entsprechend "R" oder "L" verwendet, aber es hat sich als schwer zu erkennen erwiesen. Korrigiert
Runium
8

Ich fand den Code für die akzeptierte Antwort nützlich, aber ich verwende tmux 1.8 und dies scheint eine eingebaute Funktion zu sein. Aus den tmux-Manpages unter split-window: 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.Also sollte die einfache Verwendung von -l insead von -p den Effekt haben du suchst nach. Ex:

split-window -h -l 80

Eine ähnliche Lösung für resize-panewird hier beschrieben .

Nathan Buesgens
quelle
0

Eine einfache Möglichkeit, dies zu tun, ist die Verwendung des Hauptvertikalen-Layouts mit Cb M-4 oder Cb: Wählen Sie die Hauptvertikale aus. Es wurde für Emacs entwickelt, sodass der linke Bereich 81 Spalten umfasst. Sie müssen die Option für die Breite des Hauptbereichs ändern, um ihn auf 80 zu setzen.

user38548
quelle