使tmux窗格宽80(或大约)列


12

我在编写代码时尝试遵循80列规则,我当前的tmux设置水平分割为50/50。我喜欢在左侧窗格中有vim,在右侧窗格中,我以75/25的比例进行其他操作。

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

我想最大化其他命令的不动产,当我启动工作空间时,是否可以将其精确设置为80列(或大约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

您可能会考虑使用一个编辑器,该编辑器将段落填充到您指定的列中(以您的情况为80)。检查emacs
路易斯

1
vim 7.3+具有一个colorcolumn设置,在第N个字符处添加一列替代背景。PS>我永远不会转向黑暗的一面;)
JKirchartz 2013年

Answers:


5

你想要这样的东西吗?

添加到文件并通过使其可执行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"


这似乎工作正常,当我加载工作区时是否可以自动运行它?(我也用更多信息更新了我的问题)
JKirchartz

@JKirchartz:已更新为源命令。(很高兴看到人们在使用体面的工具。))一直在使用screen,直到最近才开始尝试强迫自己使用tmux
Runium

是的,我试图找出vim拆分,我对工作流程不是很满意,screen在找到之前一天检查了一下tmux,我很喜欢。将其设置为类似于vim,现在变得轻而易举。
JKirchartz

刚刚注意到一个错误,您没有在任何地方定义$ pane,将其替换为0效果很好,谢谢!
JKirchartz

@JKirchartz:谢谢。我从一些$pane可选参数2的代码中复制了它,并在其中尝试确定窗格的位置(左/中/右),并相应地使用“ R”或“ L”,但是事实证明很难检测到。已更正。
13年

8

我发现接受答案的代码很有用,但是,我正在使用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 insead对-p应该具有效果您正在寻找。例如:

split-window -h -l 80

这里resize-pane描述类似的解决方案。


0

一种简单的方法是对Cb M-4或Cb使用main-vertical布局:selectl main-vertical。它是为emacs设计的,因此左窗格为81列,您需要更改main-pane-width选项以使其为80。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.