制作一个 80(左右)列宽的 tmux 窗格

JKi*_*rtz 12 tmux

我在编写代码时尝试遵循 80 列规则,我当前的 tmux 设置是水平拆分 50/50。我喜欢在左侧窗格中使用 vim,而在右侧窗格中我有一个 75/25 的分割,我可以在其中运行其他东西。

在我的侧面显示器上,50% 是 76 列宽,但在我的笔记本电脑显示器上,它是 123 列宽。

我想最大化其他命令的空间,有没有办法在我启动工作区时将其设置为恰好 80 列(左右)?

我目前正在设置我的工作区:

bind C-w source-file ~/dotfiles/scripts/tmux_work_layout
Run Code Online (Sandbox Code Playgroud)

该文件包含:

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
Run Code Online (Sandbox Code Playgroud)

小智 9

我发现接受的答案的代码很有用,但是,我使用的是 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
Run Code Online (Sandbox Code Playgroud)

此处resize-pane描述类似的解决方案。


Run*_*ium 5

你想要这样的东西吗?

添加到文件并通过chmod +x filename. 通过例如调用

./sizetmux       # Default hardcoded size
./sizetmux 85    # Specify width
Run Code Online (Sandbox Code Playgroud)

要从源文件运行它:

if-shell /path/to/script/sizetmux 80
Run Code Online (Sandbox Code Playgroud)

代码:

#!/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
Run Code Online (Sandbox Code Playgroud)

还必须考虑例如 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"
Run Code Online (Sandbox Code Playgroud)