Tmux

使 tmux 窗格 80(左右)列寬

  • January 23, 2022

我在編寫程式碼時嘗試遵循 80 列規則,我目前的 tmux 設置水平拆分為 50/50。我喜歡在左側窗格中使用 vim,而在右側窗格中我有 75/25 的分割,我可以在其中執行其他東西。

在我的側面顯示器上,50% 是 76 列寬,但在我筆記型電腦的顯示器上,它是 123 列寬。

我想為其他命令最大化房地產,當我啟動我的工作區時,有沒有辦法將它設置為正好 80 列(左右)?

我目前正在設置我的工作區:

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

該文件包含:

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

你想要這樣的東西嗎?

添加到文件並通過chmod +x filename. 打電話給例如

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

要從源文件執行它:

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

程式碼:

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

還必須考慮例如 vim 中的行號,所以可能是 85?


編輯可能更好一點(不是那麼混亂)(之後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"

我發現接受答案的程式碼很有用,但是,我使用的是 tmux 1.8,這似乎是一個內置的功能。從拆分視窗下的 tmux 手冊頁: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.所以,只需使用 -l insead of -p 應該有效果你正在尋找。前任:

split-window -h -l 80

這裡resize-pane描述了一個類似的解決方案。

引用自:https://unix.stackexchange.com/questions/74576