Vimperatorで「大体ここらへん」でタブを切り替える

タブを切り替える際に、:bufferコマンドから絞り込んだりしてもいいのですが、切り替えたい先のタブのタブバー上での位置が分かっている場合、:bufferコマンドの一覧から探したり絞り込みをするのは面倒です。

そこで、タブバー上の並びにおける相対的な位置を指定してタブを切り替えるキーマップ定義を作成してみました。このキーマップで大体目当てのタブがある位置に移動して、そこから手動でタブ移動をする使い方を想定しています。

liberator.modules.mappings.addUserMap(
    [liberator.modules.modes.NORMAL],
    ["<C-f>"],
    "Fuzzy Tab Switch",
    function(argument){
        tab_length = liberator.modules.tabs.count;
        if(isNaN(input = parseInt(argument))){
            switch(argument){
                case "a": input = 1; break;
                case "s": input = 2; break;
                case "d": input = 3; break;
                case "f": input = 4; break;
                case "g": input = 5; break;
                case "h": input = 6; break;
                case "j": input = 7; break;
                case "k": input = 8; break;
                case "l": input = 9; break;
                case ";": input = 0; break;
                defalut:
                    liberator.echoerr("Invalid input.");
                    return;
            }
        }

        if(input == 0) input = 10;
        fuzzy_tab_index = Math.round(tab_length * input / 10);
        liberator.modules.tabs.select(fuzzy_tab_index -1);
    },
    {
        flags: liberator.modules.Mappings.flags.ARGUMENT
    }
);

指定のキーの後に入れた数値に応じた位置にあるタブに切り替えます。たとえば、5と打つと中央のタブに移動します。0は10と扱うことにして一番最後のタブに移動します。

数字の代わりにasdfghjkl;で入力することもできます。もちろん1-9,0に対応します。