私はコードを書くときに 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 が最初のウィンドウでは機能しなくなることです。