![Machen Sie einen Tmux-Bereich mit einer Breite von etwa 80 Spalten](https://rvso.com/image/31639/Machen%20Sie%20einen%20Tmux-Bereich%20mit%20einer%20Breite%20von%20etwa%2080%20Spalten.png)
Ich versuche, beim Schreiben meines Codes die 80-Spalten-Regel einzuhalten. Mein aktuelles Tmux-Setup ist horizontal 50/50 aufgeteilt. Ich habe Vim gerne im linken Bereich und im rechten Bereich habe ich eine Aufteilung von 75/25, wo ich andere Dinge ausführe.
Auf meinem Nebenmonitor sind 50 % 76 Spalten breit, auf dem Display meines Laptops sind sie jedoch 123 Spalten breit.
Ich möchte den Platz für andere Befehle maximieren. Gibt es eine Möglichkeit, dies auf genau 80 Spalten (oder so) einzustellen, wenn ich meinen Arbeitsbereich starte?
Ich richte meinen Arbeitsbereich derzeit mit Folgendem ein:
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
Antwort1
Ich fand den Code für die akzeptierte Antwort nützlich, aber ich verwende tmux 1.8 und dies scheint eine integrierte Funktion zu sein. Aus den tmux-Manpages unter „Split-Window“: Die 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.
einfache Verwendung von -l anstelle von -p sollte also den gewünschten Effekt haben. Beispiel:
split-window -h -l 80
Eine ähnliche Lösung für resize-pane
ist beschriebenHier.
Antwort2
Ist es so etwas, das Sie möchten?
Zur Datei hinzufügen und durch chmod +x filename
.call ausführbar machen zB
./sizetmux # Default hardcoded size
./sizetmux 85 # Specify width
So führen Sie es aus der 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 auch zB die Zeilennummern in vim berücksichtigen, also vielleicht 85?
Bearbeiten vielleicht ein bisschen schöner (nicht so viel Unordnung) (nachpw0_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"
Antwort3
Eine einfache Möglichkeit hierfür ist die Verwendung des Layouts „main-vertical“ mit Cb M-4 oder Cb : selectl main-vertical. Es ist für Emacs konzipiert, sodass der linke Bereich 81 Spalten hat. Sie müssen die Option „main-pane-width“ ändern, um 80 Spalten zu erhalten.
Antwort4
Seit der Veröffentlichung der Frage und der letzten Antwort haben sich einige Dinge geändert. tmux verfügt über Hooks, mit denen die Breite des Hauptbereichs konstant gehalten werden kann.
Ich verwende beispielsweise folgenden 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;"
um ein main-vertical
layoutbasiertes Fenster zu erstellen, bei dem der Hauptbereich für 80 Spalten breite Vim-Nutzung im ersten Fenster verwendet wird. Dies verwendet window-layout-changed
ein Ereignis, um das Fenster mit der gewünschten Größe neu zu zeichnen.
Ich habe es versucht und es hat eine Weile funktioniert, client-resized
auch mit Ereignissen, aber eines Tages hat es bei Terminator-/Emulator-Fenstermaximierungsvorgängen nicht mehr funktioniert.
Ein Problem bei diesem Ansatz ist jedoch, dass Präfix-z für das erste Fenster nicht mehr funktioniert.