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.したがって、-p の代わりに -l を使用するだけで、必要な効果が得られるはずです。例:

split-window -h -l 80

同様の解決策がresize-pane説明されているここ

答え2

こういうのが欲しいんですか?

ファイルに追加し、chmod +x filename.callで実行可能にする。例:

./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 を使用して 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 が最初のウィンドウでは機能しなくなることです。

関連情報