设置tabline以显示每个标签页的当前工作目录?

时间:2015-01-13 16:43:47

标签: vim

我正在使用vim将每个项目分成不同的标签。在每个选项卡中,我更改了目录,以便每个选项卡的当前工作目录(由getcwd()返回)是项目的根文件路径。

我希望tabline显示每个标签的工作目录,而不是显示每个标签的当前激活窗口的文件路径。这样,如果我想导航到" ProjectB"选项卡,我只需单击显示ProjectB工作目录的选项卡。这样我的标签就像......

[1 / path / to / projecta] [2 / path / to / projectb] [3 / path / to / projectc]

...而不是显示不明确的文件名(通常在使用类似的filenaming约定的项目之间重复),例如......

[1 index.html] [2 styles.css] [3 App.rb]

2 个答案:

答案 0 :(得分:2)

请参阅:h setting-tabline


'标题'选项允许您定义标签页的首选方式 标签。这并不容易,因此这里将给出一个例子。

有关基础知识,请参阅'状态栏'选项。可以使用相同的项目 ' tabline'选项。另外,| tabpagebuflist()|,| tabpagenr()|和 | tabpagewinnr()|功能很有用。

由于标签标签的数量会有所不同,因此您需要使用表达式 整个选择。类似的东西:

:set tabline=%!MyTabLine()

然后定义MyTabLine()函数以列出所有标签页标签。一个 方便的方法是将它分成两部分:首先查看所有选项卡 页面并为它们定义标签。然后获取每个标签页的标签。

function MyTabLine()
  let s = ''
  for i in range(tabpagenr('$'))
    " select the highlighting
    if i + 1 == tabpagenr()
      let s .= '%#TabLineSel#'
    else
      let s .= '%#TabLine#'
    endif

    " set the tab page number (for mouse clicks)
    let s .= '%' . (i + 1) . 'T'

    " the label is made by MyTabLabel()
    let s .= ' %{MyTabLabel(' . (i + 1) . ')} '
  endfor

  " after the last tab fill with TabLineFill and reset tab page nr
  let s .= '%#TabLineFill#%T'

  " right-align the label to close the current tab page
  if tabpagenr('$') > 1
    let s .= '%=%#TabLine#%999Xclose'
  endif

  return s
endfunction

现在为每个标签页调用MyTabLabel()函数以获取其标签。 >

function MyTabLabel(n)
  let buflist = tabpagebuflist(a:n)
  let winnr = tabpagewinnr(a:n)
  return bufname(buflist[winnr - 1])
endfunction

这只是一个简单的例子,导致标签页行 类似于默认值,但没有为修改后的缓冲区添加+或 截断名称。您需要减少a中标签的宽度 当没有足够的空间时,聪明的方式。检查'列'选项 可用空间。


在您的情况下,您可以将每个选项卡的工作目录存储在列表中,并将选项卡标签设置为相应的列表元素(使用上面的MyTabLine函数)。

let twds = ['one', 'two']
function! MyTabLabel(n)
    return get(g:twds, a:n - 1, '[no name]')
endfunction

答案 1 :(得分:0)

我正在使用MacVim,因此我实际上想设置GuiLine。这对我有用:

    function! GuiTabLabel()
      let tab_num = tabpagenr()
      let win_num = tabpagewinnr(tab_num)
      return getcwd(win_num, tab_num)
    endfunction

    set guitablabel=%{GuiTabLabel()}