使 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,这似乎是一个内置功能。来自 split-window 下的 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 代替 -p 应该会产生效果你正在寻找。前任:

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 对于第一个窗口不再起作用。

相关内容