我在编写代码时尝试遵循 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 对于第一个窗口不再起作用。