我正在使用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]
答案 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()}