tmuxペインを幅80(またはそれ以上)の列にします


12

コードを書くときに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

段落を指定した列(この場合は80)まで埋めるエディターを使用することを検討できます。emacsを確認してください。
ルイス

1
vim 7.3+にはcolorcolumn、N番目の文字に代替背景の列を追加する設定があります。PS>私は決してダークサイドに振り向かない;)
JKirchartz

回答:


5

このようなものですか?

ファイルに追加し、で実行可能にし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の行番号なども考慮に入れる必要があります。


おそらく少しきれいに編集します(それほど雑然としません)(後 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"


これは完全に機能するように見えますが、ワークスペースをロードするときに自動的に実行する方法はありますか?(また、もう少し情報を追加して質問を更新しました)
JKirchartz

@JKirchartz:ソースコマンドで更新。(人々がきちんとしたツールを使用しているのを見るのは良いscreenことtmuxです。
ルニウム

ええ、私はvim splitを理解しようとしていましたが、ワークフローにあまり満足していませんでしたscreenが、見つける前に1日チェックアウトしましたtmux、それが大好きです。vimのように設定すれば、簡単になります。
JKirchartz

バグに気づいただけで、$ paneをどこにも定義しておらず、0に置き換えて完全に機能しました、ありがとう!
-JKirchartz

@JKirchartz:ああ、ありがとう。$paneオプションの引数2であり、ペインがどこ(左/中央/右)にあるかを判断し、それに応じて "R"または "L"を使用しようとしたコードからコピーしましたが、検出が難しいことが判明しました。修正しました。
ルニウム

8

受け入れられた回答のコードは有用であることがわかりましたが、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 inseadを使用すると効果がありますあなたは探している。例:

split-window -h -l 80

のための同様のソリューションresize-paneここに記述されています


0

これを行う簡単な方法は、Cb M-4またはCb:selectl main-verticalでmain-verticalレイアウトを使用することです。emacs用に設計されているため、左ペインは81列です。メインペイン幅オプションを変更して80にする必要があります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.