tabrecent.vimを書いてみた

一つ前のウィンドウに戻るにはpで可能でj,k,h,l等を気にすることなく移動できるので便利なのですが,タブに対しては該当する機能がありません.

2009-01-25 - 日々是鍛錬

私も同じような機能を実装してプラグイン化しようかと思っていた時期がありましたが、:tabonlyと:tabmoveの問題で面倒臭くなって止めました。

Re: 一つ前のタブに戻るKey mapping - 日々是鍛練 - while ("im the true Vim master"); - vimグループ

実は私も似たようなのを作ろうと昔から考えていて、いい機会だったので作ってみた。

http://github.com/thinca/vim-tabrecent/tree/master

直前に居たタブページに移動するコマンド :TabRecent を定義するプラグイン
:tabonlyや:tabmoveを使っても問題なく動作する。更に、 :TabRecent 2 などとすることで2つ前に開いていたタブにも移動できる。詳細は:help*1で。

以下書いてみて思ったこと。

  • 任意のタブページにローカルな変数にアクセスする関数が見当たらなかったので、わざわざタブに移動して取得している。どうも気持ちが悪い。任意のタブの任意のウィンドウの変数にアクセスする関数(gettabwinvar()/settabwinvar())ならある。実際ウィンドウローカル変数を使ってもできなくはなかったけど、タブ固有の値だしそれは違うだろってことでパスした。
    • getvar({varname}, {nr}) setver(..) が欲しい。{nr}は、{varname}がt:だったらタブの番号、s:だったらスクリプトのロード番号みたいなの。w:はt:に従属するからまた面倒なんだけど。
  • 調子に乗って「タブを閉じたら直前のタブを開く」機能を付けようと思ったんだけど、「タブを閉じたら」が検出できなかった。
    • TabEnter時に最新のタブを探してなくなっていたら移動という作戦。
    • が、TabEnterの時点では閉じて移動してきた前のタブがまだ残ってることが判明…。TabLeave直後に消せよ、Vim
    • 他にhookできそうな箇所も思い当たらず…。

*1:英語が怪しすぎるのでわかんないかも