2011-08-30 18 views
26

Come si può modificare il colore della barra delle schede di Vim?Personalizzazione dei colori della barra delle schede di Vim

Ho provato con

:hi TabLineFill ctermbg=N 

che fa cambiare il colore dello sfondo del barra delle schede per il colore che 'n' significa, ma questo è tutto quello che sono riuscito a raccogliere da usare Google. Ho dato un'occhiata a :help cterm-colors, ma non ho ottenuto molto più comprensione da esso.

Sarei in grado di utilizzare questa funzione di evidenziazione per modificare il colore del primo piano e dello sfondo di una scheda attiva e il primo piano e lo sfondo di una scheda non attiva? Se è così, come potrei fare questo?

risposta

38

È possibile effettuare le seguenti operazioni, ad esempio:

:hi TabLineFill ctermfg=LightGreen ctermbg=DarkGreen 
:hi TabLine ctermfg=Blue ctermbg=Yellow 
:hi TabLineSel ctermfg=Red ctermbg=Yellow 

Questa linea colpisce il contatore finestra per ogni scheda:

:hi Title ctermfg=LightBlue ctermbg=Magenta 

colori sgargianti scelto di evidenziare ciò che ciascuno degli elementi cambia.

Trovo che guardare a $VIMRUNTIME/colors/*.vim sia di grande aiuto quando si gioca con highlighting.

Si noti che questi cambiano i colori per Vim in esecuzione in una console. Se vuoi cambiare i colori per GVim, devi usare guibg, guifg, e così via. Ad esempio:

:hi TabLineFill guifg=LightGreen guibg=DarkGreen ctermfg=LightGreen ctermbg=DarkGreen 
+1

Come si modifica il contatore di finestre per scheda quando questa scheda è selezionata? – jviotti

7

Sì, lo si vorrebbe.

ci sono tre elementi della linea scheda che può essere personalizzato a proprio piacimento: TabLine, TabLineSel e TabLineFill.

TabLineSel - è l'attuale etichetta scheda attiva (per così dire).
TabLine - sono le etichette che non sono attualmente attive.
TabLineFill - è il resto della tabline in cui non sono presenti etichette (sfondo).

Si modificano tutti e tre nel solito modo.

3

L'opzione "tabline" specifica l'aspetto delle etichette di righe con tabulazioni. Viene utilizzato solo quando non è presente alcuna riga della GUI.

È possibile utilizzare l'opzione 'showtabline' per specificare quando si desidera che venga visualizzata la riga con le etichette della scheda : mai, quando c'è più di una scheda o sempre.

L'evidenziazione della riga di tabulazioni viene impostata con i gruppi TabLine TabLineSel e TabLineFill.| Hl-TabLine | | Hl-TabLineSel | | Hl-TabLineFill |

Un "+" verrà visualizzato per una scheda che ha una finestra modificata. Viene anche mostrato il numero di finestre in una pagina. Quindi "3+" significa tre finestre e uno di ha un buffer modificato.

L'opzione "tabline" consente di definire il modo preferito per le etichette delle pagine tab . Questo non è facile, quindi un esempio verrà dato qui.

Per informazioni di base, vedere l'opzione 'statusline'. Gli stessi articoli possono essere utilizzati nell'opzione "tabline" . Inoltre, | tabpagebuflist() |, | tabpagenr() | e | tabpagewinnr() | le funzioni sono utili

Poiché il numero di etichette delle schede varia, è necessario utilizzare un'espressione per l'intera opzione. Qualcosa del tipo:> : imposta tabline =%! MyTabLine()

Quindi definire la funzione MyTabLine() per elencare tutte le etichette delle schede. Un metodo conveniente di è dividerlo in due parti: prima vai su tutte le pagine della scheda e definisci le etichette per esse. Quindi prendi l'etichetta per ogni scheda. >

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 

Ora la funzione MyTabLabel() viene chiamata per ciascuna scheda per ottenere l'etichetta. >

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

Questo è solo un esempio semplicistico che si traduce in una scheda pagine linea che assomiglia il default, ma senza l'aggiunta di un + per un buffer modificato o troncando i nomi. Dovrai ridurre la larghezza delle etichette in un modo intelligente quando non c'è abbastanza spazio. Controlla l'opzione "colonne" per lo spazio disponibile.

+1

lol letterale copia-incolla. non che questa sia una cattiva risposta. – Kvass

Problemi correlati