调整NERDTree窗口上的vim Tabline大小调整大小

时间:2013-11-30 07:53:19

标签: vim

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

我从来没有真正喜欢标签如何从Tabline的“开头”开始(NERDTree窗口顶部会有标签)。我想让标签从NERDTree窗口的END开始(即右边缘),类似于IDE。所以我定义了我自己的tabline:

" 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 tabline =%!Tabline(g:ntw)“,其中g:btw是NERDTree窗口调整大小时NERDTree的当前宽度。但我无法找到找到一种方法来做到这一点。

作为旁注,由于我使用的是NERDTreeTabs插件,您可以假设NERDTree窗口始终存在。您还可以假设NERDTree窗口始终位于左侧。

那么我的问题是:

1)有没有更优雅的方法来完成这项工作?

2)如果不是1),我怎么能实现我想做的事情? (请提供示例代码)

提前致谢!

1 个答案:

答案 0 :(得分:1)

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