Vim:在标签栏中显示标签索引


8

可以说,我开了file1.txtfile2.txtfile3a.txtfile3b.txt使得tabline(顶部的东西)看起来像这样:

file1.txt  file2.txt  2 file3a.txt

(请注意file3b.txt.缺少的原因,因为它在拆分中显示在与相同的标签中file3a.txt

为了更快地在选项卡之间移动(使用<Number>gt),我希望每个选项卡沿着文件名显示其索引。像这样:

1:<file1.txt>  2:<file2.txt>  3:<2 file3a.txt>

格式(特别是尖括号)是可选的;我只希望索引显示在此处(1:2:依此类推)。

没有任何线索:h tab-page-commands或谷歌。


1
更新:插件可能会有所帮助。我认为它是在回答了这个问题之后很久才创建的,因此它不会出现在任何答案中。
crayzeewulf 2015年

Answers:


0

您需要查看:

:help 'tabline'
:help setting-tabline

并且,如果您在“ guioptions”设置中包含“ e”,则:

:help 'guitablabel'

那使我走上了正轨。非常感谢!
bitmask,

9
@bitmask也许可以提供您的解决方案?庚烷,您可以修改答案吗?
wmarbut 2012年

@wmarbut使用此插件,太好了。
ospider

同意 当解决方案显然“找到”但未提供时,非常令人失望,并且每个人都必须花费相同的时间来挖掘文档并编写相同的配置。
Alex H

12

将此放入您的vimrc

" Rename tabs to show tab number.
" (Based on http://stackoverflow.com/questions/5927952/whats-implementation-of-vims-default-tabline-function)
if exists("+showtabline")
    function! MyTabLine()
        let s = ''
        let wn = ''
        let t = tabpagenr()
        let i = 1
        while i <= tabpagenr('$')
            let buflist = tabpagebuflist(i)
            let winnr = tabpagewinnr(i)
            let s .= '%' . i . 'T'
            let s .= (i == t ? '%1*' : '%2*')
            let s .= ' '
            let wn = tabpagewinnr(i,'$')

            let s .= '%#TabNum#'
            let s .= i
            " let s .= '%*'
            let s .= (i == t ? '%#TabLineSel#' : '%#TabLine#')
            let bufnr = buflist[winnr - 1]
            let file = bufname(bufnr)
            let buftype = getbufvar(bufnr, 'buftype')
            if buftype == 'nofile'
                if file =~ '\/.'
                    let file = substitute(file, '.*\/\ze.', '', '')
                endif
            else
                let file = fnamemodify(file, ':p:t')
            endif
            if file == ''
                let file = '[No Name]'
            endif
            let s .= ' ' . file . ' '
            let i = i + 1
        endwhile
        let s .= '%T%#TabLineFill#%='
        let s .= (tabpagenr('$') > 1 ? '%999XX' : 'X')
        return s
    endfunction
    set stal=2
    set tabline=%!MyTabLine()
    set showtabline=1
    highlight link TabNum Special
endif

2
你知道这'%999XX'是什么意思吗?
2014年

由于该版本适用于终端和gvim,因此我认为它是最佳解决方案。先生,请接受我的投票。
imolit 2015年

5

Wikia页面上,您可能会发现至少两个(我测试过的)为您提供了选项卡索引,其中一个会产生每个缓冲区中具有编辑内容的窗口数。

这是我对产生已编辑缓冲区计数的修改的结果,所做的更改是使计数的突出显示值与选项卡的其余部分一致:

在此处输入图片说明

set tabline=%!MyTabLine()  " custom tab pages line
function MyTabLine()
        let s = '' " complete tabline goes here
        " loop through each tab page
        for t in range(tabpagenr('$'))
                " set highlight
                if t + 1 == tabpagenr()
                        let s .= '%#TabLineSel#'
                else
                        let s .= '%#TabLine#'
                endif
                " set the tab page number (for mouse clicks)
                let s .= '%' . (t + 1) . 'T'
                let s .= ' '
                " set page number string
                let s .= t + 1 . ' '
                " get buffer names and statuses
                let n = ''      "temp string for buffer names while we loop and check buftype
                let m = 0       " &modified counter
                let bc = len(tabpagebuflist(t + 1))     "counter to avoid last ' '
                " loop through each buffer in a tab
                for b in tabpagebuflist(t + 1)
                        " buffer types: quickfix gets a [Q], help gets [H]{base fname}
                        " others get 1dir/2dir/3dir/fname shortened to 1/2/3/fname
                        if getbufvar( b, "&buftype" ) == 'help'
                                let n .= '[H]' . fnamemodify( bufname(b), ':t:s/.txt$//' )
                        elseif getbufvar( b, "&buftype" ) == 'quickfix'
                                let n .= '[Q]'
                        else
                                let n .= pathshorten(bufname(b))
                        endif
                        " check and ++ tab's &modified count
                        if getbufvar( b, "&modified" )
                                let m += 1
                        endif
                        " no final ' ' added...formatting looks better done later
                        if bc > 1
                                let n .= ' '
                        endif
                        let bc -= 1
                endfor
                " add modified label [n+] where n pages in tab are modified
                if m > 0
                        let s .= '[' . m . '+]'
                endif
                " select the highlighting for the buffer names
                " my default highlighting only underlines the active tab
                " buffer names.
                if t + 1 == tabpagenr()
                        let s .= '%#TabLineSel#'
                else
                        let s .= '%#TabLine#'
                endif
                " add buffer names
                if n == ''
                        let s.= '[New]'
                else
                        let s .= n
                endif
                " switch to no underlining and add final space to buffer list
                let s .= ' '
        endfor
        " after the last tab fill with TabLineFill and reset tab page nr
        let s .= '%#TabLineFill#%T'
        " right-align the label to close the current tab page
        if tabpagenr('$') > 1
                let s .= '%=%#TabLineFill#%999Xclose'
        endif
        return s
endfunction

您的脚本比其他脚本更好,因为它保留了选项卡显示文件是否已编辑的部分。谢谢!
Plasty Grove

是的,我一直在使用airline插件中的制表符,但老实说,我想到的这个旧制表符具有更多功能……
Steven Lu

3

tabline插件是一个Vim插件实现请求的功能,并不会吹出来的你的vimrc。只需安装,然后重新启动vim。

安装:

cd /usr/share/vim/vimfiles/plugin/
wget https://raw.githubusercontent.com/mkitt/tabline.vim/master/plugin/tabline.vim

或使用插件管理器。


1
欢迎来到超级用户!请阅读“ 如何推荐软件”以获取最少的必需信息,以及有关如何在“超级用户”上推荐软件的建议。为了使您的答案有用,即使提供的链接中断,这些详细信息也应编辑为您的答案。
我说恢复莫妮卡

0

对于基于GUI的Vim(Linux上为Gvim,Mac上为MacVim等),请将其放入您的.gvimrc

set guitablabel=%N:%M%t " Show tab numbers

实际使用显示数字的一些技巧:

  • Ngt将切换到标签N。例如,3gt转到选项卡3。
  • :tabm2移动当前选项卡出现片2。
    • 要将标签移动到第一位置,请使用 :tabm0
    • 要将标签移动到最后一个位置,只需使用 :tabm
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.