Vimの:tabsからfzfで検索してタブを開く


まえがき

ザクッと作ってみたので共有します。
vim8でも、NeoVimでも大丈夫です。
fzfはすでにインストールしてある前提です。

.vimrc
Plug 'junegunn/fzf', { 'dir': '~/.fzf', 'do': './install --all' }
Plug 'junegunn/fzf.vim'

.vimrc または init.vimに以下を記述

以下を.vimrcまたはinit.vimに書きます

.vimrc
" [tab open] ----------------------------------
" 数あるタブから開く

" leader to で開始するための設定
nnoremap <leader>to :FZFTabOpen<CR>
command! FZFTabOpen call s:FZFTabOpenFunc()

function! s:FZFTabOpenFunc()
    call fzf#run({
            \ 'source':  s:GetTabList(),
            \ 'sink':    function('s:TabListSink'),
            \ 'options': '-m -x +s',
            \ 'down':    '40%'})
endfunction

function! s:GetTabList()
    let s:tabList = execute('tabs')
    let s:textList = []
    for tabText  in split(s:tabList, '\n')
        let s:tabPageText = matchstr(tabText, '^Tab page')
        if !empty(s:tabPageText)
            let s:pageNum = matchstr(tabText, '[0-9]*$')
        else 
            let s:textList = add(s:textList, printf('%d %s',
                \ s:pageNum,
                \ tabText,
                \   ))
        endif
    endfor
    return s:textList
endfunction

function! s:TabListSink(line)
    let parts = split(a:line, '\s')
    execute 'normal ' . parts[0] . 'gt' 
endfunction

実行イメージ

あとがき

:tabs コマンドと同じように現在開いているものには> が付いたりもします。(基本的に:tabs のファイル名の行をそのまま出力します)
一つのタブの中で複数のbufferを開いている場合もすべて列挙し、左の数字がどのタブ番号かを教えてくれます。

最近OniVimを使っていて、一つのVimを開きっぱなしにしていることが多くなったので開きっぱなしのタブも増えてきた…ということで組んでみました。
OniVimについてはまた今度まとめます。