如何让tab在vim中只显示文件名而不是完整路径

b4lqfgs4  于 2022-11-11  发布在  其他
关注(0)|答案(5)|浏览(216)

如果一个文件的完整路径很长,你不能告诉哪个文件是在一个给定的选项卡。所以我想知道是有一种方法,让选项卡只显示文件名,而不是文件的完整路径,在某些情况下可能是方便的。

vmdwslir

vmdwslir1#

尝试
:set guitablabel=%t
有关可能选项的格式,请参见
:help '状态行'

trnvg8h3

trnvg8h32#

我在我的vimrc中有以下内容:

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

其输出:[Number]文件名和+号,如果文件被修改([4] foo.html +)。Number对于使用命令[Number]gt立即切换到所选选项卡非常有用(4gt如果我想跳到选项卡4中的文件)

qyuhtwio

qyuhtwio3#

我使用这个解决方案而不是Habi的,因为这个解决方案仍然保留了默认的特性,即在标签页中放置一个“+”符号来指示正在修改的文件,以及标签页中窗口的数量。所以它基本上与默认的标签页标签相同,只是使用文件名,而不是完整的路径。

" 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()
zzzyeukh

zzzyeukh4#

其他解决方案仅适用于GUI VIM,不适用于终端VIM或嵌入式VIM(nvim)。
您可以使用vim-plugvim-airline。然后,将此添加到您的.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'
iaqfqrcu

iaqfqrcu5#

有人在底部的链接张贴this on reddit,工作完美。

function! Tabline() abort
    let l:line = ''
    let l:current = tabpagenr()

    for l:i in range(1, tabpagenr('$'))
        if l:i == l:current
            let l:line .= '%#TabLineSel#'
        else
            let l:line .= '%#TabLine#'
        endif

        let l:label = fnamemodify(
            \ bufname(tabpagebuflist(l:i)[tabpagewinnr(l:i) - 1]),
            \ ':t'
        \ )

        let l:line .= '%' . i . 'T' " Starts mouse click target region.
        let l:line .= '  ' . l:label . '  '
    endfor

    let l:line .= '%#TabLineFill#'
    let l:line .= '%T' " Ends mouse click target region(s).

    return l:line
endfunction

set tabline=%!Tabline()

相关问题