minglee

vim的标签栏是一个比较有用的功能,我们可以通过gt和gT快捷键前后切换标签页,也可以用数字+gt的方式,快速跳转到某个标签页,但是默认的标签栏上标签序号并没有显示出来,在标签页较多的时候,想要通过数字+gt的方式迅速跳转时,就不是很方便了。

有鉴于此,笔者通过一定的摸索, 自定义了自己的一个简单的标签栏。代码如下:

"-----------------------美化标签栏-----------------------
"定义颜色
hi SelectTabLine term=Bold cterm=Bold gui=Bold ctermbg=None
hi SelectPageNum cterm=None ctermfg=Red ctermbg=None
hi SelectWindowsNum cterm=None ctermfg=DarkCyan ctermbg=None

hi NormalTabLine cterm=Underline ctermfg=Black ctermbg=LightGray
hi NormalPageNum cterm=Underline ctermfg=DarkRed ctermbg=LightGray
hi NormalWindowsNum cterm=Underline ctermfg=DarkMagenta ctermbg=LightGray

function! MyTabLabel(n, select)
    let label = \'\'
    let buflist = tabpagebuflist(a:n)
    for bufnr in buflist
        if getbufvar(bufnr, "&modified")
            let label = \'+\' 
            break
        endif
    endfor

    let winnr = tabpagewinnr(a:n)
    let name = bufname(buflist[winnr - 1]) 
    if name == \'\'
        "为没有名字的文档设置个名字
        if &buftype == \'quickfix\'
            let name = \'[Quickfix List]\'
        else
            let name = \'[No Name]\'
        endif
    else
        "只取文件名
        let name = fnamemodify(name, \':t\')
    endif

    let label .= name
    return label
endfunction

function! MyTabLine()
    let s = \'\'
    for i in range(tabpagenr(\'$\'))
        " 选择高亮
        let hlTab = \'\'
        let select = 0 
        if i + 1 == tabpagenr()
            let hlTab = \'%#SelectTabLine#\'
            " 设置标签页号 (用于鼠标点击)
            let s .= hlTab . "[%#SelectPageNum#%T" . (i + 1) . hlTab
            let select = 1
        else
            let hlTab = \'%#NormalTabLine#\'
            " 设置标签页号 (用于鼠标点击)
            let s .= hlTab . "[%#NormalPageNum#%T" . (i + 1) . hlTab
        endif

        " MyTabLabel() 提供标签
        let s .= \' %<%{MyTabLabel(\' . (i + 1) . \', \' . select . \')} \'

        "追加窗口数量
        let wincount = tabpagewinnr(i + 1, \'$\')
        if wincount > 1
            if select == 1
                let s .= "%#SelectWindowsNum#" . wincount
            else
                let s .= "%#NormalWindowsNum#" . wincount
            endif
        endif
        let s .= hlTab . "]"
    endfor

    " 最后一个标签页之后用 TabLineFill 填充并复位标签页号
    let s .= \'%#TabLineFill#%T\'

    " 右对齐用于关闭当前标签页的标签
    if tabpagenr(\'$\') > 1
        let s .= \'%=%#TabLine#%999XX\'
    endif

    return s
endfunction
set tabline=%!MyTabLine()

将这段代码复制到.vimrc之中,:source ~/.vimrc或者重新打开vim,即可看到新的标签栏效果。下面给出了标签栏优化前后的对比:

前:

后:

可以看到相比于之前,保留了修改标记“+”、窗口数量,只保留了文件名,标签栏的最大长度比之前更长,最关键的是,增加了标签序号的显示。这个改动初看可能没有以前的好看,但是关键在于,我们掌握了自定义标签栏的方式,并且掌握了颜色的设置,具体细节可以通过查阅vim帮助手册来获取。

参考:

分类:

技术点:

相关文章:

  • 2022-12-23
  • 2021-11-03
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-11-01
  • 2021-10-18
猜你喜欢
  • 2022-12-23
  • 2021-11-27
  • 2022-12-23
  • 2021-11-15
  • 2022-12-23
  • 2022-12-23
  • 2021-11-03
相关资源
相似解决方案