LoginSignup
7
8

More than 5 years have passed since last update.

tmux上でVimを開くときにpaneを分割する

Last updated at Posted at 2015-12-16

2015/12/17追記
Macだとちゃんと動いたけどFedora22だとうまくいかない模様
何か方法考えます

2015/12/17さらに追記
tmux has-sessionでセッションが存在するかをチェックできるようなので、そちらを使うように修正しました。

おっきいディスプレイわーい!と思いながら使ってるわけですが、ターミナルを全画面で開いてるときにVimを起動すると余白が気になります。
サイドにタグバーとかファイル一覧とか出しててもやっぱり余白が大きい。
tmux使ってるんだし分割して動かせばいいかなと思ったんですが、いちいちスプリットしてから開くのも面倒なので自動でやってくれるように設定してみました。

tmuxはsplit-windowにコマンドを渡してあげると、分割した画面でそのコマンドを実行してくれるので

tmux split-window -h -p 70 "vim $1"

とします。
-hで水平分割、-p 70で横幅が全体の70%になります。
ちなみに-vを指定すると垂直分割になり、-pで指定した値が高さのパーセンテージになります。

これをvimのエイリアスにしてあげてもいいのですが、tmux上以外で実行するとエラーになるのでシェルの関数にしてみました。

split_vim() {
    tmux has-session &> /dev/null
    if [ $? = 0 ];
    then
        tmux split-window -h -p 70 "vim $1"
    else
        vim $1
    fi
}

これだけでもいいのですが、横幅が狭いときに分割されると今度は狭いのである程度幅があるときだけ分割するようにします。
$COLUMNSでカラム数がとれるのでこれをベースに

split_vim() {
    tmux has-session &> /dev/null
    if [ $? = 0 ] && [ $COLUMNS -ge 120 ];
    then
        tmux split-window -h -p 70 "vim $1"
    else
        vim $1
    fi
}

ついでに、すでに何かしらpaneの分割がされている場合には新たに分割したくない場合はlist-panesを使ってpaneの数を見る。

split_vim() {
    np=`tmux list-panes | wc | awk '{print $1}'`
    tmux has-session &> /dev/null
    if [ $? = 0 ] && [ $COLUMNS -ge 120 ] && [ $np = 1 ];
    then
        tmux split-window -h -p 70 "vim $1"
    else
        vim $1
    fi
}

この方法でtmuxの外でpaneの数を確認するとエラーメッセージが出るから数が1になるんだけど
あとのtmuxの存在確認で失敗するからまぁいいかなと妥協してます。
あとはこれをエイリアスにしてあげて

alias vim="split_vim $1"

としてあげると、vimと打ったときにpane分割してくれます。
横幅とかはお好みで指定するのがいいかと。

tmuxが起動してるか確認する方法とかpaneの数を確認する方法とか何か良い方法あればいいんだけど。

7
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
8