Vim : 탭에서 fzf로 검색하여 탭 열기

5486 단어 neovimVimfzf

머리



자쿠로 만들어 보았으므로 공유합니다.
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에 대해서는 또 이번에 정리합니다.

좋은 웹페이지 즐겨찾기