Buat lebar tmux panel 80 (atau lebih)

12

Saya mencoba untuk mengikuti aturan 80 kolom ketika menulis kode saya, pengaturan tmux saya saat ini dibagi 50/50 secara horizontal. Saya suka memiliki vim di panel kiri, dan di panel kanan saya memiliki perpecahan 75/25 di mana saya menjalankan hal-hal lain.

Di monitor sisi saya 50% lebarnya 76 kolom, tetapi di layar laptop saya lebar 123 kolom.

Saya ingin memaksimalkan real-estate untuk perintah lain, Apakah ada cara untuk mengatur ini persis 80 kolom (atau lebih) ketika saya meluncurkan ruang kerja saya?

Saat ini saya sedang menyiapkan ruang kerja saya dengan:

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

file itu mengandung:

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
sumber
Anda dapat mempertimbangkan untuk menggunakan editor yang mengisi paragraf hingga kolom yang Anda tentukan, 80 dalam kasus Anda. Periksa emacs .
Luis
1
vim 7.3+ memiliki colorcolumnpengaturan yang menambahkan kolom latar belakang alternatif pada karakter ke-N. PS> Saya tidak akan pernah beralih ke sisi gelap;)
JKirchartz

Jawaban:

5

Apakah ini sesuatu yang Anda inginkan?

Tambahkan ke file dan buat dapat dieksekusi oleh chmod +x filename. panggilan dengan mis

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

Untuk menjalankannya dari file sumber:

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

Kode:

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

Kita juga harus memperhitungkan mis. Nomor-baris dalam vim jadi mungkin 85?


Edit mungkin sedikit lebih bagus (tidak terlalu berantakan) (setelah 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
sumber
ini tampaknya berfungsi dengan baik, adakah cara untuk menjalankannya secara otomatis ketika saya memuat ruang kerja saya? (juga saya sudah memperbarui pertanyaan saya dengan sedikit lebih banyak info)
JKirchartz
@JKirchartz: Diperbarui dengan perintah sumber. (Senang melihat orang menggunakan alat yang layak btw.;)) Telah menggunakan screendan baru-baru ini mulai mencoba untuk memaksakan diri tmux.
Runium
Ya, saya mencoba mencari tahu tentang pemecahan masalah vim, dan saya tidak begitu senang dengan alur kerjanya, diperiksa screensehari sebelum menemukan tmux, saya menyukainya. Atur agar seperti vim dan sekarang sangat mudah.
JKirchartz
baru saja melihat bug, Anda tidak mendefinisikan $ pane di mana pun, menggantikannya dengan 0 bekerja dengan sempurna, terima kasih!
JKirchartz
@JKirchartz: Ah, terima kasih. Saya menyalinnya dari beberapa kode di mana $paneargumen opsional 2 dan di mana saya mencoba menentukan di mana panel (kiri / tengah / kanan) dan menggunakan "R" atau "L" sesuai, tetapi terbukti sulit dideteksi. Dikoreksi.
Runium
8

Saya menemukan kode untuk jawaban yang diterima berguna tetapi, saya menggunakan tmux 1.8 dan ini tampaknya menjadi fitur bawaan. Dari halaman tmux man di bawah 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.Jadi, cukup menggunakan -l insead of -p seharusnya memiliki efek Anda sedang mencari. ex:

split-window -h -l 80

Solusi serupa untuk resize-panedijelaskan di sini .

Nathan Buesgens
sumber
0

Cara mudah untuk melakukannya adalah dengan menggunakan tata letak main-vertikal dengan Cb M-4 atau Cb: selectl main-vertical. Ini dirancang untuk emacs sehingga panel kiri adalah 81 kolom, Anda harus mengubah opsi lebar-panel-lebar untuk membuatnya 80.

pengguna38548
sumber