2015-01-13 54 views
1

我正在使用vim將我的每個項目分隔到不同的選項卡中。在每個選項卡中,我已更改目錄,以便每個選項卡的當前工作目錄(由getcwd()返回)是項目的根文件路徑。將tabline設置爲顯示每個tabpage的當前工作目錄?

而不是顯示每個選項卡當前激活的窗口的文件路徑,我想tabline顯示每個選項卡的工作目錄。這樣,如果我想導航到「ProjectB」選項卡,我只需點擊顯示ProjectB工作目錄的選項卡即可。這樣,我的標籤看起來像...

[1 /路徑/要/項目A] [2 /路徑/ /到項目B]的

[3 /路徑/要/項目C]

...而不是顯示含糊的文件名(即經常重複使用類似的文件命名約定項目之間),例如...

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

回答

2

參見:h setting-tabline


Th e'tabline'選項允許您定義標籤頁 標籤的首選方式。這並不容易,因此這裏給出一個例子。

有關基本信息,請參閱'statusline'選項。可以在 'tabline'選項中使用相同的項目。此外,| tabpagebuflist()|,| tabpagenr()|和 | tabpagewinnr()|功能很有用。

由於選項卡標籤的數量會有所不同,因此您需要使用整個選項的表達式來表示 。例如:

:set tabline=%!MyTabLine() 

然後定義MyTabLine()函數以列出所有標籤頁標籤。 A 方便的方法是將其分爲兩部分:首先瀏覽所有選項卡 頁面併爲它們定義標籤。然後獲取每個標籤頁的標籤。

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 

這僅僅是一個簡單的例子,結果在一個標籤頁行該 類似於默認,但不添加用於+改性緩衝器或 截斷名稱。在沒有足夠空間時,您會希望以巧妙的方式減少標籤的寬度。檢查 可用空間的'列'選項。


你的情況,你可以存儲在工作目錄列表中的每個選項卡和選項卡標籤設置爲相應的列表元素(使用MyTabLine功能從上面藏漢)。

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