Tạo một cột tmux khung 80 (hoặc hơn)


12

Tôi đang cố tuân theo quy tắc cột 80 khi viết mã, thiết lập tmux hiện tại của tôi được chia 50/50 theo chiều ngang. Tôi thích có vim trong khung bên trái, và trong khung bên phải tôi có một phân chia 75/25 nơi tôi chạy các thứ khác.

Trên màn hình của tôi, 50% là 76 cột, nhưng trên màn hình máy tính xách tay của tôi, nó rộng 123 cột.

Tôi muốn tối đa hóa bất động sản cho các lệnh khác, Có cách nào để đặt điều này thành chính xác 80 cột (hoặc hơn) khi tôi khởi chạy không gian làm việc của mình không?

Tôi hiện đang thiết lập không gian làm việc của mình với:

bind C-w source-file ~/dotfiles/scripts/tmux_work_layout

tập tin đó chứa:

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

Bạn có thể xem xét sử dụng một trình soạn thảo điền vào đoạn văn cho đến cột bạn chỉ định, 80 trong trường hợp của bạn. Kiểm tra emacs .
Luis

1
vim 7.3+ có colorcolumncài đặt thêm một cột của nền thay thế ở ký tự thứ N. PS> Tôi sẽ không bao giờ chuyển sang mặt tối;)
JKirchartz

Câu trả lời:


5

Có phải cái gì đó như thế này bạn muốn?

Thêm vào tập tin và thực hiện bằng cách chmod +x filename. gọi bằng ví dụ

./sizetmux       # Default hardcoded size
./sizetmux 85    # Specify width

Để chạy nó từ tập tin có nguồn gốc:

if-shell /path/to/script/sizetmux 80

Mã số:

#!/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

Người ta cũng phải tính đến ví dụ: số dòng trong vim vậy có lẽ là 85?


Chỉnh sửa có lẽ đẹp hơn một chút (không quá nhiều lộn xộn) (sau 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"


Điều này dường như hoạt động hoàn hảo, có cách nào để chạy nó tự động khi tôi tải không gian làm việc của mình không? (cũng tôi đã cập nhật câu hỏi của mình với một ít thông tin hơn)
JKirchartz

@JKirchartz: Được cập nhật với lệnh nguồn. (Rất vui khi thấy mọi người sử dụng các công cụ tốt btw .;)) Đã sử dụng screenvà chỉ gần đây mới bắt đầu cố gắng ép buộc bản thân mình tmux.
Runium

Vâng, tôi đã cố gắng tìm ra sự chia tách vim và tôi không hài lòng với quy trình làm việc, đã kiểm tra screenmột ngày trước khi tìm thấy tmux, tôi thích nó. Thiết lập nó giống như vim và bây giờ là một làn gió.
JKirchartz

chỉ nhận thấy một lỗi, bạn không xác định $ pane ở bất cứ đâu, thay thế bằng 0 hoạt động hoàn hảo, cảm ơn!
JKirchartz

@JKirchartz: À, cảm ơn. Tôi đã sao chép nó từ một số mã trong đó $panelà đối số tùy chọn 2 và ở đó tôi đã cố gắng xác định khung ở đâu (trái / giữa / phải) và sử dụng "R" hoặc "L" tương ứng, nhưng tỏ ra khó phát hiện. Đã sửa.
Runium

8

Tôi thấy mã cho câu trả lời được chấp nhận hữu ích nhưng, tôi đang sử dụng tmux 1.8 và đây có vẻ là một tính năng được tích hợp. Từ các trang man của tmux dưới cửa sổ chia nhỏ: 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.Vì vậy, chỉ cần sử dụng -l insead của -p sẽ có hiệu lực bạn đang tìm kiếm. Ví dụ:

split-window -h -l 80

Một giải pháp tương tự cho resize-paneđược mô tả ở đây .


0

Một cách dễ dàng để làm điều này là sử dụng bố cục dọc chính với Cb M-4 hoặc Cb: selectl main-vertical. Nó được thiết kế cho emacs nên khung bên trái là 81 cột, bạn sẽ cần thay đổi tùy chọn chiều rộng khung chính để làm cho nó 80.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.