Quantcast
Channel: Vimタグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 5608

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

$
0
0

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の数を確認する方法とか何か良い方法あればいいんだけど。


Viewing all articles
Browse latest Browse all 5608

Trending Articles