33

If the full path of a file is very long, you can't tell which file is in a given tab. so I'm wondering is there is a way let the tab only display the file name rather than the full path of the file, might be convenient in some case.

Alexis Wilke
  • 17,282
  • 10
  • 73
  • 131
Haiyuan Zhang
  • 38,486
  • 40
  • 103
  • 133

4 Answers4

37

Try

:set guitablabel=%t

For format of possible options see

:help 'statusline'

Habi
  • 3,194
  • 24
  • 23
24

I have the following in my vimrc:

set guitablabel=\[%N\]\ %t\ %M 

which outputs: [Number] Filename and + sign if a file is modified ([4] foo.html +). Number is very useful to immediate switch to the chosen tab with command [Number]gt (4gt if I want to jump to the file in the tab 4)

larsen1
  • 241
  • 2
  • 2
  • 4
    Should be noted that %N only shows the tab number in gui vim. If you have `set guioptions-=e`, or are using terminal vim, then %N seems to represent the number of windows (splits) open in the tab and NOT the tab number. See `h setting-tabline` or this https://github.com/mkitt/tabline.vim – overthink Oct 30 '13 at 14:26
5

I use this solution instead of Habi's as this one still keeps the default features of putting a '+' symbol in the tab to indicate the files being modified, as well as a count of the number of windows in the tab. So it basically works the same as the default tab labelling but just uses file names, not full paths.

" Tab headings
function GuiTabLabel()
    let label = ''
    let bufnrlist = tabpagebuflist(v:lnum)

    " Add '+' if one of the buffers in the tab page is modified
    for bufnr in bufnrlist
        if getbufvar(bufnr, "&modified")
            let label = '+'
            break
        endif
    endfor

    " Append the number of windows in the tab page if more than one
    let wincount = tabpagewinnr(v:lnum, '$')
    if wincount > 1
        let label .= wincount
    endif
    if label != ''
        let label .= ' '
    endif

    " Append the buffer name (not full path)
    return label . "%t"
endfunction

set guitablabel=%!GuiTabLabel()
David Terei
  • 1,917
  • 15
  • 18
  • Ideal solution: make a list of path/words/filename in all tab titles, if two titles are same, pick the unique/part/pathname for naming that tab. More complicated to code, but easier for user to disambiguate automatically. – mosh Aug 29 '16 at 05:22
2

The other solutions only work for GUI VIM and does not work for terminal vim or embedded vim (nvim).

You can use vim-plug and vim-airline. Then, add this to your .vimrc.

call plug#begin(stdpath('data') . '/plugged')
Plug 'vim-airline/vim-airline'
Plug 'vim-airline/vim-airline-themes'
call plug#end()

let g:airline#extensions#tabline#enabled = 1
let g:airline#extensions#tabline#fnamemod = ':t'
Armin Primadi
  • 724
  • 6
  • 10