我正在使用带有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),我怎么能实现我想做的事情? (请提供示例代码)
提前致谢!
答案 0 :(得分:1)
假设NERD_Tree窗口始终位于左侧,占据整个高度,其窗口编号为1.然后,您可以通过winwidth(1)
查询当前宽度,而不是在{{1}中对其进行硬编码变量。