Vim: muestra el índice de pestañas en la pestaña

8

Digamos que abrí file1.txt, file2.txt, file3a.txty file3b.txtde tal manera que la tabline (la cosa en la parte superior) es similar al siguiente:

file1.txt  file2.txt  2 file3a.txt

(Tenga en cuenta cómo file3b.txt.falta porque se muestra en una división, en la misma pestaña que file3a.txt)

Para moverme más rápido entre pestañas (con <Number>gt), me gustaría que cada pestaña muestre su índice, junto con el nombre del archivo. Al igual que:

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

El formato (las llaves angulares en particular) son opcionales; Solo quiero que el índice aparezca allí (el 1:, 2:y así sucesivamente).

No hay pistas :h tab-page-commandso google en absoluto.

máscara de bits
fuente
1
Actualización: este complemento puede ser útil. Creo que se creó mucho después de que se respondió esta pregunta, por lo que no aparece en ninguna de las respuestas.
crayzeewulf

Respuestas:

0

Necesitas mirar:

:help 'tabline'
:help setting-tabline

Y si tiene "e" en la configuración de 'guioptions':

:help 'guitablabel'
Heptita
fuente
Eso me llevó por el buen camino. ¡Muchas gracias!
bitmask
99
@bitmask, ¿podría proporcionar su solución? Heptita, ¿podrías enmendar tu respuesta?
wmarbut
@wmarbut usa este complemento , es maravilloso.
Ospider
Convenido. Extremadamente decepcionante cuando aparentemente se "encuentra" la solución pero no se proporciona y todos tienen que pasar la misma cantidad de tiempo buscando documentos y escribiendo las mismas configuraciones.
Alex H
12

pon esto en tu 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
David Xia
fuente
2
¿Sabes lo que '%999XX'significa aquí?
Bach
Dado que este funciona tanto para terminal como para gvim, creo que es la mejor solución. Tome mi voto a favor, señor.
imolit
5

En la página de wikia puede encontrar al menos dos (los que probé) que le dan los índices de tabulación, y uno de ellos produce el número de ventanas dentro de cada búfer que tienen ediciones.

Aquí está el resultado de mis modificaciones en la que produce el recuento de buffers editados, el cambio que hice fue hacer que el valor resaltado del recuento sea coherente con el resto de la pestaña:

ingrese la descripción de la imagen aquí

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
Steven Lu
fuente
Su script es mejor que el otro, ya que conserva la parte donde la pestaña muestra si el archivo ha sido editado. ¡Gracias!
Plasty Grove el
Sí, he estado usando la tabulación del airlinecomplemento, pero para ser honesto, esta vieja tabulación que se me ocurrió es mucho más funcional ...
Steven Lu
3

El complemento tabline es un complemento vim que implementa la funcionalidad solicitada y no destruirá su vimrc. Simplemente instale y reinicie vim.

Instalar:

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

o use un administrador de complementos.

efemerr
fuente
1
¡Bienvenido a Super User! Lea Cómo recomendar software para obtener la información mínima requerida y sugerencias sobre cómo recomendar software en Super User. Para que su respuesta sea útil incluso si los enlaces proporcionados rompen estos detalles, debe editarlos en su respuesta.
Digo reinstalar a Mónica el
0

Para Vim basado en GUI (Gvim en Linux, MacVim en Mac, etc.), ponga esto en su .gvimrc:

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

Algunos consejos sobre el uso real de los números mostrados:

  • Ngtcambiará a la pestaña N. Por ejemplo, 3gtva a la pestaña 3.
  • :tabm2mueve la pestaña actual para que aparezca después de la pestaña 2.
    • Para mover esta pestaña a la primera posición, use :tabm0
    • Para mover esta pestaña a la última posición, solo use :tabm
Nathan Long
fuente