tabeで開いているファイルはそのタブにジャンプする


tabeで開いているファイルはそのタブにジャンプする

こんな感じで,どんどん同じファイルが別タブで増えるのが嫌だったけど情報か見つからなかったので, vimrcを書きました

中身

これを$MYVIMRCにコピペすればtabeでできるはず

command! -nargs=1 -complete=file Tabe call MyTabEdit(<f-args>)
function! MyTabEdit(...) abort
    let l:sbuf = &switchbuf
    if bufexists(a:1)
        let l:bufnr = bufnr(a:1)
        if l:bufnr is bufnr("%")
            " いま開いているなら何もしない
            return 
        endif
        for i in range(tabpagenr('$'))
            let l:bufs = tabpagebuflist(i+1)
            for j in l:bufs
                if j is l:bufnr
                    " 別タブで開いているならsbufferで飛ぶ
                    set switchbuf=usetab
                    execute "sbuffer" j
                    let &switchbuf = l:sbuf
                    return 
                endif
            endfor
        endfor
        " 見えていないバッファなら, 別タブで開く
        execute "tab split" a:1

    else
        " バッファがなければ開く
        execute "tabe" a:1
    endif
endfunction


cnoremap tabe Tabe
cnoremap tabedit tabedit

  • command! ... :TabeでMyTabEdit関数を呼び出せるようにコマンド登録する. -complete=file を入れとくとtabキーでファイル補完ができるらしい
  • MyTabEdit コメントにあるとおり. 別タブで開く時は, switchbuf=usetabにして, sbufferでバッファを開くようにしている.
  • cnoremap ...
    :tabeと入力したときに:Tabeと自動で変換する
    同様に:tabeditと入力したときは:Tabeditとならないように, :tabeditと変換する.

  • その他

    変数の展開の仕方から, 関数の作成, 実行方法まで何もかもわからなかった.
    勉強しながらかいたのでもっといい方法あるのかも...
    ご存知でしたらおしえてください