Vim: Zeigt den Index der Registerkarten in der Registerkartenzeile an


8

Können sagen , ich öffnete file1.txt, file2.txt, file3a.txtund file3b.txtso , dass die tabline (das Ding auf der Oberseite) sieht wie folgt aus :

file1.txt  file2.txt  2 file3a.txt

(Beachten Sie, wie file3b.txt.fehlt, da es in einer Aufteilung auf derselben Registerkarte wie angezeigt wird. file3a.txt)

Um schneller zwischen Registerkarten (mit <Number>gt) zu wechseln , möchte ich, dass jede Registerkarte ihren Index entlang des Dateinamens anzeigt. Wie so:

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

Die Formatierung (insbesondere die spitzen Klammern) ist optional. Ich will nur der Index dort erscheinen (das 1:, 2:und so weiter).

Keine Hinweise auf :h tab-page-commandsoder Google überhaupt.


1
Update: Dieses Plugin könnte hilfreich sein. Ich denke, es wurde viel nach der Beantwortung dieser Frage erstellt, sodass es in keiner der Antworten erscheint.
Crayzeewulf

Antworten:


0

Sie müssen sich Folgendes ansehen:

:help 'tabline'
:help setting-tabline

Und wenn Sie "e" in Ihrer "Guioptions" -Einstellung haben:

:help 'guitablabel'

Das hat mich auf den richtigen Weg gebracht. Vielen Dank!
Bitmaske

9
@bitmask könnten Sie vielleicht Ihre Lösung liefern? Heptite, könnten Sie Ihre Antwort ändern?
wmarbut

@wmarbut benutze dieses Plugin , es ist wunderbar.
Ospider

Einverstanden. Sehr enttäuschend, wenn die Lösung anscheinend "gefunden", aber nicht bereitgestellt wird und jeder die gleiche Zeit damit verbringen muss, Dokumente zu durchsuchen und dieselben Konfigurationen zu schreiben.
Alex H

12

lege dies in dein 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
Wissen Sie, was '%999XX'hier bedeutet?
Bach

Da dieses sowohl für Terminal als auch für GVIM funktioniert, denke ich, dass es die beste Lösung ist. Nehmen Sie meine Gegenstimme, Sir.
Imolit

5

Auf der Wikia-Seite finden Sie möglicherweise mindestens zwei (die von mir getesteten), die Ihnen die Registerkartenindizes geben, und eines davon erzeugt die Anzahl der Fenster in jedem Puffer, die bearbeitet wurden.

Hier ist das Ergebnis meiner Änderungen an demjenigen, der die Anzahl der bearbeiteten Puffer erzeugt. Die Änderung, die ich vorgenommen habe, bestand darin, den Hervorhebungswert der Anzahl mit dem Rest der Registerkarte in Einklang zu bringen:

Geben Sie hier die Bildbeschreibung ein

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

Ihr Skript ist besser als das andere, da es den Teil beibehält, in dem auf der Registerkarte angezeigt wird, ob die Datei bearbeitet wurde. Vielen Dank!
Plasty Grove

Ja, ich habe die Tabline aus dem airlinePlugin verwendet, aber um ehrlich zu sein, diese alte Tabline, die ich mir ausgedacht habe, ist viel funktionaler ...
Steven Lu

3

Das Tabline-Plugin ist ein Vim-Plugin, das die angeforderte Funktionalität implementiert und Ihr vimrc nicht ausbläst. Einfach installieren und vim neu starten.

Installieren:

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

oder verwenden Sie einen Plugin-Manager.


1
Willkommen bei Super User! Bitte lesen Sie So empfehlen Sie Software, um die minimal erforderlichen Informationen und Vorschläge zur Empfehlung von Software für Super User zu erhalten. Damit Ihre Antwort auch dann nützlich bleibt, wenn der / die bereitgestellte (n) Link (e) nicht funktioniert, sollten diese Details in Ihrer Antwort bearbeitet werden.
Ich sage Reinstate Monica

0

Fügen Sie für GUI-basiertes Vim (Gvim unter Linux, MacVim unter Mac usw.) Folgendes in Folgendes ein .gvimrc:

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

Einige Tipps zur tatsächlichen Verwendung der angezeigten Zahlen:

  • Ngtwechselt zur Registerkarte N. Zum Beispiel 3gtgeht es zu Tab 3.
  • :tabm2Verschiebt die aktuelle Registerkarte so, dass sie nach Registerkarte 2 angezeigt wird.
    • Verwenden Sie, um diese Registerkarte an die erste Position zu verschieben :tabm0
    • Verwenden Sie einfach, um diese Registerkarte an die letzte Position zu verschieben :tabm
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.