Создайте панель 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, и это, похоже, встроенная функция. Из страниц руководства tmux в разделе split-window: 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. вызвать с помощью eg

./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

Простой способ сделать это — использовать макет main-vertical с 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окна на основе макета, где основная панель используется для использования vim шириной 80 столбцов в первом окне. Это использует window-layout-changedсобытие для перерисовки окна с желаемым размером.

Я попробовал, и это работало некоторое время, client-resizedв том числе и с событиями, но в один прекрасный день перестало работать при операциях по развертыванию окна терминатора/эмулятора.

Однако при таком подходе есть одна проблема: префикс -z больше не работает для первого окна.

Связанный контент