我在編寫程式碼時嘗試遵循 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
答案1
我發現接受的答案的代碼很有用,但是,我正在使用 tmux 1.8,這似乎是一個內置功能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.
。正在尋找。前任:
split-window -h -l 80
resize-pane
描述了類似的解決方案這裡。
答案2
你想要這樣的東西嗎?
新增至檔案並使其可執行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"
答案3
執行此操作的簡單方法是將主垂直佈局與 Cb M-4 或 Cb : selectl main-vertical 一起使用。它是為 emacs 設計的,因此左窗格有 81 列,您需要更改 main-pane-width 選項以使其變為 80。
答案4
自從問題和最後一個答案發布以來,情況發生了變化。 tmux 有鉤子,可用於保持主窗格的寬度固定。
例如我使用以下別名:
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;"
建立一個main-vertical
基於佈局的窗口,其中主窗格用於第一個視窗中 80 列寬的 vim 使用。這使用window-layout-changed
事件以所需的大小重繪視窗。
我嘗試過,它工作了一段時間,client-resized
也適用於事件,但有一天它停止為終結器/模擬器視窗最大化操作工作。
但這種方法的一個問題是,前綴 z 對於第一個視窗不再起作用。