Vim: mostra l'indice delle schede nella scheda


8

Consente di dire che ho aperto file1.txt, file2.txt, file3a.txte file3b.txtin modo tale che il tabline (la cosa in alto) assomiglia a questo:

file1.txt  file2.txt  2 file3a.txt

(Nota come file3b.txt.manca perché è mostrato in una divisione, nella stessa scheda di file3a.txt)

Per spostarmi più rapidamente tra le schede (con <Number>gt), vorrei che ciascuna scheda mostrasse il suo indice, lungo il nome del file. Così:

1:<file1.txt>  2:<file2.txt>  3:<2 file3a.txt>

La formattazione (in particolare le parentesi angolari) è facoltativa; Voglio solo che l'indice appaia lì (il 1:, 2:e così via).

Nessun indizio :h tab-page-commandso google di sorta.


1
Aggiornamento: questo plugin potrebbe essere utile. Penso che sia stato creato molto dopo la risposta a questa domanda, quindi non compare in nessuna delle risposte.
crayzeewulf,

Risposte:


0

Devi guardare:

:help 'tabline'
:help setting-tabline

E se hai "e" nella tua impostazione "guioptions":

:help 'guitablabel'

Questo mi ha portato sulla strada giusta. Molte grazie!
Maschera di bit

9
@bitmask potresti forse fornire la tua soluzione? Heptite, potresti modificare la tua risposta?
Wmarbut,

@wmarbut usa questo plugin , è meraviglioso.
ospider

Concordato. Estremamente deludente quando apparentemente la soluzione viene "trovata" ma non fornita e tutti devono passare lo stesso tempo a scavare tra i documenti e scrivere le stesse configurazioni.
Alex H,

12

mettilo nel tuo vimrc

" Rename tabs to show tab number.
" (Based on http://stackoverflow.com/questions/5927952/whats-implementation-of-vims-default-tabline-function)
if exists("+showtabline")
    function! MyTabLine()
        let s = ''
        let wn = ''
        let t = tabpagenr()
        let i = 1
        while i <= tabpagenr('$')
            let buflist = tabpagebuflist(i)
            let winnr = tabpagewinnr(i)
            let s .= '%' . i . 'T'
            let s .= (i == t ? '%1*' : '%2*')
            let s .= ' '
            let wn = tabpagewinnr(i,'$')

            let s .= '%#TabNum#'
            let s .= i
            " let s .= '%*'
            let s .= (i == t ? '%#TabLineSel#' : '%#TabLine#')
            let bufnr = buflist[winnr - 1]
            let file = bufname(bufnr)
            let buftype = getbufvar(bufnr, 'buftype')
            if buftype == 'nofile'
                if file =~ '\/.'
                    let file = substitute(file, '.*\/\ze.', '', '')
                endif
            else
                let file = fnamemodify(file, ':p:t')
            endif
            if file == ''
                let file = '[No Name]'
            endif
            let s .= ' ' . file . ' '
            let i = i + 1
        endwhile
        let s .= '%T%#TabLineFill#%='
        let s .= (tabpagenr('$') > 1 ? '%999XX' : 'X')
        return s
    endfunction
    set stal=2
    set tabline=%!MyTabLine()
    set showtabline=1
    highlight link TabNum Special
endif

2
Sai cosa '%999XX'significa qui?
Bach,

Dal momento che questo funziona sia per terminal che per gvim, penso che sia la soluzione migliore. Prendi il mio voto, signore.
imolit,

5

Nella pagina wiki puoi trovarne almeno due (quelli che ho testato) che ti danno gli indici delle schede, e uno di questi produce il numero di finestre all'interno di ciascun buffer che hanno delle modifiche.

Ecco il risultato delle mie modifiche su quello che produce il conteggio dei buffer modificati, la modifica che ho apportato è stata per rendere il valore di evidenziazione del conteggio coerente con il resto della scheda:

inserisci qui la descrizione dell'immagine

set tabline=%!MyTabLine()  " custom tab pages line
function MyTabLine()
        let s = '' " complete tabline goes here
        " loop through each tab page
        for t in range(tabpagenr('$'))
                " set highlight
                if t + 1 == tabpagenr()
                        let s .= '%#TabLineSel#'
                else
                        let s .= '%#TabLine#'
                endif
                " set the tab page number (for mouse clicks)
                let s .= '%' . (t + 1) . 'T'
                let s .= ' '
                " set page number string
                let s .= t + 1 . ' '
                " get buffer names and statuses
                let n = ''      "temp string for buffer names while we loop and check buftype
                let m = 0       " &modified counter
                let bc = len(tabpagebuflist(t + 1))     "counter to avoid last ' '
                " loop through each buffer in a tab
                for b in tabpagebuflist(t + 1)
                        " buffer types: quickfix gets a [Q], help gets [H]{base fname}
                        " others get 1dir/2dir/3dir/fname shortened to 1/2/3/fname
                        if getbufvar( b, "&buftype" ) == 'help'
                                let n .= '[H]' . fnamemodify( bufname(b), ':t:s/.txt$//' )
                        elseif getbufvar( b, "&buftype" ) == 'quickfix'
                                let n .= '[Q]'
                        else
                                let n .= pathshorten(bufname(b))
                        endif
                        " check and ++ tab's &modified count
                        if getbufvar( b, "&modified" )
                                let m += 1
                        endif
                        " no final ' ' added...formatting looks better done later
                        if bc > 1
                                let n .= ' '
                        endif
                        let bc -= 1
                endfor
                " add modified label [n+] where n pages in tab are modified
                if m > 0
                        let s .= '[' . m . '+]'
                endif
                " select the highlighting for the buffer names
                " my default highlighting only underlines the active tab
                " buffer names.
                if t + 1 == tabpagenr()
                        let s .= '%#TabLineSel#'
                else
                        let s .= '%#TabLine#'
                endif
                " add buffer names
                if n == ''
                        let s.= '[New]'
                else
                        let s .= n
                endif
                " switch to no underlining and add final space to buffer list
                let s .= ' '
        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 .= '%=%#TabLineFill#%999Xclose'
        endif
        return s
endfunction

Lo script è migliore dell'altro poiché conserva la parte in cui la scheda mostra se il file è stato modificato. Grazie!
Plasty Grove,

Sì, sto usando il tabline dal airlineplugin, ma ad essere sincero, questo vecchio tabline che ho inventato è molto più funzionale ...
Steven Lu

3

Il plug-in tabline è un plug-in vim che implementa la funzionalità richiesta e non spegne il tuo vimrc. Basta installare e riavviare vim.

Installare:

cd /usr/share/vim/vimfiles/plugin/
wget https://raw.githubusercontent.com/mkitt/tabline.vim/master/plugin/tabline.vim

o utilizzare un gestore plug-in.


1
Benvenuto in Super User! Leggere Come raccomandare il software per informazioni minime richieste e suggerimenti su come raccomandare il software su Super User. Per mantenere la risposta utile anche se i collegamenti forniti interrompono questi dettagli, è necessario modificarli nella risposta.
Dico Reintegrare Monica il

0

Per Vim basato su GUI (Gvim su Linux, MacVim su Mac, ecc.), Inseriscilo nel tuo .gvimrc:

set guitablabel=%N:%M%t " Show tab numbers

Alcuni consigli sull'utilizzo effettivo dei numeri visualizzati:

  • Ngtpasserà alla scheda N. Ad esempio, 3gtvai alla scheda 3.
  • :tabm2sposta la scheda corrente in modo che appaia dopo la scheda 2.
    • Per spostare questa scheda nella prima posizione, utilizzare :tabm0
    • Per spostare questa scheda nell'ultima posizione, basta usare :tabm
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.