使 tmux 窗格的寬度為 80(或左右)列

使 tmux 窗格的寬度為 80(或左右)列

我在編寫程式碼時嘗試遵循 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 對於第一個視窗不再起作用。

相關內容