Vim: Покажіть індекс вкладок у рядку


8

Припустимо , я відкрив file1.txt, file2.txt, file3a.txtі file3b.txtтакі , що tabline (річ зверху) виглядає наступним чином :

file1.txt  file2.txt  2 file3a.txt

(Зверніть увагу, як file3b.txt.його немає, оскільки він відображений у розщепленні, на тій самій вкладці, що і file3a.txt)

Щоб швидше переходити між вкладками (з <Number>gt), я хотів би, щоб кожна вкладка відображала свій індекс уздовж імені файлу. Так:

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

Форматування (зокрема, кутові дужки) необов’язкове; Я просто хочу , індекс з'являтися там ( 1:, 2:і так далі).

Немає жодних підказок про :h tab-page-commandsGoogle або Google.


1
Оновлення: Цей плагін може бути корисним. Я думаю, що він був створений значно після того, як відповіли на це запитання, тому воно не відображається в жодній із відповідей.
crayzeewulf

Відповіді:


0

Вам потрібно подивитися:

:help 'tabline'
:help setting-tabline

І якщо у налаштуваннях 'guioptions' у вас є "e":

:help 'guitablabel'

Це привело мене в правильний шлях. Дуже дякую!
бітмаска

9
@bitmask міг би запропонувати ваше рішення? Гептите, ви могли б змінити свою відповідь?
wmarbut

@wmarbut використовуйте цей плагін , це чудово.
ospider

Домовились. Надзвичайно розчаровує, коли рішення, мабуть, "знайдено", але не надається, і всі повинні витратити однакову кількість часу на перекочування документів і написання одних і тих же конфігурацій.
Алекс Н

12

помістіть це у свій 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
Чи знаєте ви, що '%999XX'тут означає?
Бах

Оскільки цей працює як для терміналу, так і для gvim, я вважаю, що це найкраще рішення. Візьміть мою заяву, сер.
imolit

5

На сторінці wikia ви можете знайти щонайменше два (те, що я перевірив), які дають вам індекси вкладок, і одне з них створює кількість вікон всередині кожного буфера, які мають зміни.

Ось результат моїх модифікацій на тій, яка виробляє кількість відредагованих буферів, я внесла зміни, щоб зробити значення підрахунку підрахунку відповідним решті вкладки:

введіть тут опис зображення

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

Ваш сценарій кращий за інший, оскільки він зберігає ту частину, де відображається вкладка, чи файл був відредагований. Дякую!
Plasty Grove

Так, я використовував табло з airlineплагіна, але якщо чесно, цей старий табло, який я придумав, є набагато більш функціональним ...
Стівен Лу,

3

Tabline плагін є ВІМ плагін , який реалізує запитаний функціональність і не здути ваш vimrc. Просто встановіть і перезапустіть vim.

Щоб встановити:

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

або використовувати диспетчер плагінів.


1
Ласкаво просимо до Супер Користувача! Прочитайте, як рекомендувати програмне забезпечення для мінімально необхідної інформації та пропозицій щодо того, як рекомендувати програмне забезпечення для Super User. Щоб ваша відповідь була корисною, навіть якщо надані посилання переривають ці дані, слід відредагувати вашу відповідь.
Я кажу: Відновити Моніку

0

Для Vim на основі GUI (Gvim на Linux, MacVim на Mac тощо) введіть це у свої .gvimrc:

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

Деякі поради щодо фактичного використання відображених цифр:

  • Ngtперейде на вкладку N. Наприклад, 3gtпереходить до вкладки 3.
  • :tabm2переміщує поточну вкладку, щоб вона з’явилася після вкладки 2.
    • Щоб перемістити цю вкладку на перше місце, використовуйте :tabm0
    • Щоб перемістити цю вкладку в останню позицію, просто використовуйте :tabm
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.