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 매뉴얼 페이지에서: 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.따라서 간단히 -p 대신 -l을 사용하면 효과가 있습니다. 당신이 찾고있는. 전:

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가 첫 번째 창에서 더 이상 작동하지 않는다는 것입니다.

관련 정보