调整NERDTree窗口上的vim-tabline的大小



我正在使用带有NERDTree和NERDTreeTabs的vim(终端/控制台vim NOT gui vim)。正如你可能已经猜到的,我喜欢使用vim的选项卡功能来跟踪多个打开的文件。

我从来都不喜欢选项卡在表格行的"开头"开始的方式(在NERDTree窗口的顶部会有选项卡)。我想让选项卡从NERDTree窗口的END(即右边缘)开始,类似于IDE。所以我定义了我自己的表格:

" Globals
" NERDTree width
let g:ntw = 25
set showtabline=2 " Always show tabs
function! Tabline(width)
    let s = '%#String#'. repeat(' ', a:width).'|'
    for i in range(tabpagenr('$'))
        let tab = i + 1
        let bufnr = tabpagebuflist(tab)[tabpagewinnr(tab) - 1]
        let bufname = bufname(bufnr)
        let s .= '%' . tab . 'T'
        let s .= (tab == tabpagenr() ? '%#TabLineSel#' : '%#TabLine#')
        let s .= ' '.(bufname != '' ? fnamemodify(bufname, ':t') : 'New ').' '
        if getbufvar(bufnr, "&mod") " If buf is modified
            let s .= '+ '
        endif
    endfor
    let s .= '%#TabLineFill#'
    return s
endfunction
set tabline=%!Tabline(g:ntw)
let g:NERDTreeWinSize = g:ntw

基本上,我所做的就是在任何选项卡开始之前在表格中插入空格。空格的宽度将与NERDTree的宽度相匹配。现在的问题是当我调整NERDTree窗口的大小时。显然,制表符行的额外间距不会自动调整大小,从而导致不匹配。

我在想我可以找到一种方法来执行"set-tableline=%!Tabline(g:ntw)"其中g:btw是每当调整NERDTree窗口的大小时NERDTree的当前宽度。但我找不到这样做的方法。

顺便说一句,由于我使用的是NERDTreeTabs插件,您可以假设NERDTree窗口将始终存在。您还可以假设NERDTree窗口将始终位于左侧。

那么我的问题是:

1) 有没有更优雅的方法来完成这件事?

2) 如果答案是否定的,我该如何实现我想要做的事情?(请提供示例代码)

提前感谢!

假设NERD_Tree窗口始终位于左侧,占据整个高度,则其窗口编号为1。然后,您可以通过winwidth(1)查询当前宽度,而不是在g:ntw变量中对其进行硬编码。

最新更新