Сделайте панель tmux шириной 80 (или около того) столбцов

12

Я пытаюсь следовать правилу 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
JKirchartz
источник
Вы можете рассмотреть возможность использования редактора, который заполняет абзац до указанного вами столбца, 80 в вашем случае. Проверьте emacs .
Луис
1
vim 7.3+ имеет colorcolumnпараметр, который добавляет столбец альтернативного фона в N-й символ. PS> Я никогда не
поверну

Ответы:

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"

Runium
источник
кажется, это работает отлично, есть ли способ запустить его автоматически, когда я загружаю свое рабочее пространство? (также я обновил свой вопрос с немного большей информацией)
JKirchartz
@JKirchartz: Обновлено с помощью команды источника. (Приятно видеть, что люди используют приличные инструменты, между прочим;)) Использовали screenи только недавно начали пытаться заставить себя tmux.
Runium
Да, я пытался выяснить, vim сплит, и я не был очень доволен рабочим процессом, проверил screenза день, прежде чем найти tmux, я люблю его. Установите его как vim-like, и теперь это бриз.
JKirchartz
только что заметил ошибку, вы нигде не определяете $ pane, заменив это на 0 сработало отлично, спасибо!
JKirchartz
@JKirchartz: Ах, спасибо. Я скопировал его из некоторого кода, где $paneбыл необязательный аргумент 2, и где я пытался определить, где находится панель (слева / в центре / справа), и соответственно использовать «R» или «L», но оказалось, что это трудно обнаружить. Исправленный.
Runium
8

Я нашел код для принятого ответа полезным, но я использую 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 insead из -p должно иметь эффект ты ищешь. например:

split-window -h -l 80

Аналогичное решение resize-paneописано здесь .

Натан Бюгенс
источник
0

Самый простой способ сделать это - использовать основную вертикаль с помощью Cb M-4 или Cb: selectl main-vertical. Он предназначен для emacs, поэтому левая панель содержит 81 столбец, вам нужно изменить опцию main-pane-width, чтобы она была равна 80.

user38548
источник