【Vim】流畅切换buffer或者tab

作者: 饶曉文 | 来源:发表于2017-03-05 12:01 被阅读424次

文中所谈及代码在这里t-vim

最终目的:

  1. 在只有一个tab的情况下,按<Leader>➕数字,切换buffer,而且不需要关心真正的buffer number是多少(真正的Buffer number通常不是从1开始的,而且Buffer删除之后不会重新排序),所见即所得。
  2. 在多个tab的情况下,按<Leader>➕数字,切换tab。

分两种情况:

  1. 使用vim-airline
  2. 使用vim-bufferline

第一种情况:使用vim-airline自带功能进行tab和Buffer之间的切换,如下配置

airline 部分关键的配置,主要是设置tabline扩展:

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。

关键配置:

这里设置不显示buffer number,因为对我们来说已经没有意义。

   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>

函数:

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

上面函数首先做了这些判断:

  1. 是否使用vim-airline,那么使用airline统一接口切换tab或者bufer
  2. 是否存在多于一个tab,那么切换tab
  3. 切换buffer

相关文章

  • 【Vim】流畅切换buffer或者tab

    文中所谈及代码在这里t-vim。 最终目的: 在只有一个tab的情况下,按➕数字,切换buffer...

  • vim 使用心得!

    vim切换buffer 命令 ls 可查看当前已打开的buffer命令 b num 可切换buffer (num为...

  • vim中的buffer,windows,tab

    1.buffer vim中buffer的概念对应notepad++编辑器中tab的概念,打开一个文件编辑的时候,相...

  • vim只关闭buffer不关闭窗口

    关闭窗口可能分为: 退出vim; 关闭vim中的窗口,比如tab、分屏 针对这两种情况,如何做到只关闭buffer...

  • TouchSlide、Swipper 开发笔记

    bug:tab栏切换中TouchSlide、swipper失效 原因 :tab栏切换隐藏了TouchSlide或者...

  • VIM简易学习

    vimtutor命令可以打开vim教程。 esc切换回(Normal)模式 tab/CTRL - D:改变文本直到...

  • SpaceVim & Vim 总结

    安装 查看帮助 一些比较常用的快捷键 FuzzyFind Buffer 切换 窗口管理 Tab管理 删除空行 错误...

  • jQuery之切换

    初级Tab切换 预览 进阶Tab切换 预览 Tab切换效果(上下切换) 预览 Tab切换效果(水平切换) 和上下切...

  • MAC下Chrome常用快捷键

    切换tab control + shift + tab 向前切换 control + tab 向后切换

  • vim 修改tab为四个空格

    在 Vim 中设置 Tab在 Vim 中可以很方便的根据不同的文件类型来设置使用 tab 制表符或者空格,还可以设...

网友评论

    本文标题:【Vim】流畅切换buffer或者tab

    本文链接:https://www.haomeiwen.com/subject/tcvsgttx.html