文中所談及代碼在這里t-vim。
最終目的:
- 在只有一個(gè)tab的情況下嗤堰,按<Leader>?數(shù)字戴质,切換buffer,而且不需要關(guān)心真正的buffer number是多少(真正的Buffer number通常不是從1開始的踢匣,而且Buffer刪除之后不會(huì)重新排序)告匠,所見即所得。
- 在多個(gè)tab的情況下离唬,按<Leader>?數(shù)字后专,切換tab。
分兩種情況:
第一種情況:使用vim-airline自帶功能進(jìn)行tab和Buffer之間的切換输莺,如下配置
airline 部分關(guān)鍵的配置戚哎,主要是設(shè)置tabline擴(kuò)展:
let g:airline#extensions#tabline#enabled = 1
let g:airline#extensions#tabline#tab_nr_type = 1 " tab number
let g:airline#extensions#tabline#show_tab_nr = 1
let g:airline#extensions#tabline#formatter = 'default'
let g:airline#extensions#tabline#buffer_nr_show = 0
let g:airline#extensions#tabline#fnametruncate = 16
let g:airline#extensions#tabline#fnamecollapse = 2
let g:airline#extensions#tabline#buffer_idx_mode = 1
第二種情況,使用vim-bufferline嫂用,在cmd窗口顯示buffer型凳。
關(guān)鍵配置:
這里設(shè)置不顯示buffer number,因?yàn)閷?duì)我們來說已經(jīng)沒有意義嘱函。
let g:bufferline_show_bufnr = 0
按鍵映射:
" tab or buf 1
nnoremap <leader>1 :call te#utils#tab_buf_switch(1)<cr>
" tab or buf 2
nnoremap <leader>2 :call te#utils#tab_buf_switch(2)<cr>
" tab or buf 3
nnoremap <leader>3 :call te#utils#tab_buf_switch(3)<cr>
" tab or buf 4
nnoremap <leader>4 :call te#utils#tab_buf_switch(4)<cr>
" tab or buf 5
nnoremap <leader>5 :call te#utils#tab_buf_switch(5)<cr>
" tab or buf 6
nnoremap <leader>6 :call te#utils#tab_buf_switch(6)<cr>
" tab or buf 7
nnoremap <leader>7 :call te#utils#tab_buf_switch(7)<cr>
" tab or buf 8
nnoremap <leader>8 :call te#utils#tab_buf_switch(8)<cr>
" tab or buf 9
nnoremap <leader>9 :call te#utils#tab_buf_switch(9)<cr>
函數(shù):
function! te#utils#tab_buf_switch(num) abort
if exists('g:feat_enable_airline') && g:feat_enable_airline == 1
execute 'normal '."\<Plug>AirlineSelectTab".a:num
else
if exists( '*tabpagenr' ) && tabpagenr('$') != 1
" Tab support && tabs open
execute 'normal '.a:num.'gt'
else
let l:temp=a:num
let l:buf_index=a:num
let l:buf_count=len(filter(range(1, bufnr('$')), 'buflisted(v:val)'))
if l:temp > l:buf_count
return
endif
while l:buf_index != 0
while !buflisted(l:temp)
let l:temp += 1
endw
let l:buf_index -= 1
if l:buf_index != 0
let l:temp += 1
endif
endw
execute ':'.l:temp.'b'
endif
endif
endfunction
上面函數(shù)首先做了這些判斷:
- 是否使用vim-airline甘畅,那么使用airline統(tǒng)一接口切換tab或者bufer
- 是否存在多于一個(gè)tab,那么切換tab
- 切換buffer